在android中,如何在多文本视图上手动收缩放大和缩小?
如何在framelayout中的多个文本视图上手动拖放?在android中,如何在多文本视图上手动收缩放大和缩小?,android,android-activity,zooming,textview,pinchzoom,Android,Android Activity,Zooming,Textview,Pinchzoom,如何在framelayout中的多个文本视图上手动拖放? 我已经添加了两个textview,我想在单个textview上同时拖放功能 我在framelayout中添加了TextView。这是我的密码: public class MainActivity extends AppCompatActivity { //private ImageView imageView; private TextView textView,textView1; private ScaleGestureDetec
我已经添加了两个textview,我想在单个textview上同时拖放功能 我在framelayout中添加了TextView。这是我的密码:
public class MainActivity extends AppCompatActivity {
//private ImageView imageView;
private TextView textView,textView1;
private ScaleGestureDetector scaleGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text_view);
textView1 = (TextView) findViewById(R.id.text_view1);
// imageView = (ImageView) findViewById(R.id.ImageView01);
scaleGestureDetector = new ScaleGestureDetector(this, new simpleOnScaleGestureListener());
textView.setOnTouchListener(new View.OnTouchListener() {
private int deltaX;
private int deltaY;
private float initialTouchX;
private float initialTouchY;
private boolean isMoved;
private int lastTouchX;
private int lastTouchY;
@Override
public boolean onTouch(final View v, final MotionEvent event) {
ViewGroup vg = (ViewGroup) v.getParent();
int draggedViewIndex = vg.indexOfChild(v);
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
boolean result = v.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
isMoved = false;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v
.getLayoutParams();
deltaX = (int) initialTouchX - params.leftMargin;
deltaY = (int) initialTouchY - params.topMargin;
lastTouchX = (int) initialTouchX;
lastTouchY = (int) initialTouchY;
Log.e("ashish", "ACTION_DOWN lasttouchX: " + lastTouchX);
Log.e("ashiosh", "ACTION_DOWN lasttouchY: " + lastTouchY);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isMoved
&& event.getAction() != MotionEvent.ACTION_UP) {
//perform LongClickOperation
}
}
});
}
}, 1000);
break;
}
case MotionEvent.ACTION_MOVE: {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v
.getLayoutParams();
params.leftMargin = (int) initialTouchX - deltaX;
params.topMargin = (int) initialTouchY - deltaY;
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP: {
if ((lastTouchX == (int) initialTouchX)
&& (lastTouchY == (int) initialTouchY)) {
isMoved = false;
} else if ((lastTouchX > (int) initialTouchX)) {
if (((lastTouchX - (int) initialTouchX) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchX < (int) initialTouchX)) {
if ((((int) initialTouchX - lastTouchX) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchY > (int) initialTouchY)) {
if (((lastTouchY - (int) initialTouchY) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchY < (int) initialTouchY)) {
if ((((int) initialTouchY - lastTouchY) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else {
isMoved = true;
}
if (!isMoved) {
//perform onClick operation
} else {
isMoved = false;
}
initialTouchX = 0;
initialTouchY = 0;
deltaX = 0;
deltaY = 0;
break;
}
default:
return result;
}
textView.invalidate();
return true;
}
});
textView1.setOnTouchListener(new View.OnTouchListener() {
private int deltaX;
private int deltaY;
private float initialTouchX;
private float initialTouchY;
private boolean isMoved;
private int lastTouchX;
private int lastTouchY;
@Override
public boolean onTouch(final View v, final MotionEvent event) {
ViewGroup vg = (ViewGroup) v.getParent();
int draggedViewIndex = vg.indexOfChild(v);
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
boolean result = v.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
isMoved = false;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v
.getLayoutParams();
deltaX = (int) initialTouchX - params.leftMargin;
deltaY = (int) initialTouchY - params.topMargin;
lastTouchX = (int) initialTouchX;
lastTouchY = (int) initialTouchY;
Log.e("ashish", "ACTION_DOWN lasttouchX: " + lastTouchX);
Log.e("ashiosh", "ACTION_DOWN lasttouchY: " + lastTouchY);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isMoved
&& event.getAction() != MotionEvent.ACTION_UP) {
//perform LongClickOperation
}
}
});
}
}, 1000);
break;
}
case MotionEvent.ACTION_MOVE: {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v
.getLayoutParams();
params.leftMargin = (int) initialTouchX - deltaX;
params.topMargin = (int) initialTouchY - deltaY;
v.setLayoutParams(params);
break;
}
case MotionEvent.ACTION_UP: {
if ((lastTouchX == (int) initialTouchX)
&& (lastTouchY == (int) initialTouchY)) {
isMoved = false;
} else if ((lastTouchX > (int) initialTouchX)) {
if (((lastTouchX - (int) initialTouchX) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchX < (int) initialTouchX)) {
if ((((int) initialTouchX - lastTouchX) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchY > (int) initialTouchY)) {
if (((lastTouchY - (int) initialTouchY) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else if ((lastTouchY < (int) initialTouchY)) {
if ((((int) initialTouchY - lastTouchY) <= 10)) {
isMoved = false;
} else {
isMoved = true;
}
} else {
isMoved = true;
}
if (!isMoved) {
//perform onClick operation
} else {
isMoved = false;
}
initialTouchX = 0;
initialTouchY = 0;
deltaX = 0;
deltaY = 0;
break;
}
default:
return result;
}
textView1.invalidate();
return true;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
scaleGestureDetector.onTouchEvent(event);
return true;
}
public class simpleOnScaleGestureListener extends
ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
float size = textView.getTextSize();
float size1 = textView1.getTextSize();
Log.d("TextSizeStart", String.valueOf(size));
float factor = detector.getScaleFactor();
float factor1 = detector.getScaleFactor();
Log.d("Factor", String.valueOf(factor));
float product = size * factor;
float product1 = size1 * factor1;
Log.d("TextSize", String.valueOf(product));
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, product);
textView1.setTextSize(TypedValue.COMPLEX_UNIT_PX, product1);
size = textView.getTextSize();
size1 = textView1.getTextSize();
Log.d("TextSizeEnd", String.valueOf(size));
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
public类MainActivity扩展了AppCompatActivity{
//私人影像视图;
私有文本视图文本视图,文本视图1;
私人scalegestruedetector scalegestruedetector;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.text\u视图);
textView1=(TextView)findViewById(R.id.text\u view1);
//imageView=(imageView)findViewById(R.id.ImageView01);
scalegestruedetector=新的scalegestruedetector(这是新的SimpleOnScalegestrueListener());
textView.setOnTouchListener(新视图.OnTouchListener(){
私人所得税;
德尔泰私人酒店;
私有浮点数;
私家侦探敏感;
私有布尔值被移动;
私有int lastTouchX;
私家侦探;
@凌驾
公共布尔onTouch(最终视图v、最终运动事件){
ViewGroup vg=(ViewGroup)v.getParent();
int-draggedViewIndex=vg.indexOfChild(v);
initialTouchX=event.getRawX();
initialTouchY=event.getRawY();
布尔结果=v.onTouchEvent(事件);
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:{
isMoved=假;
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams)v
.getLayoutParams();
deltaX=(int)initialTouchX-params.leftMargin;
deltaY=(int)initialTouchY-params.topMargin;
lastTouchX=(int)initialTouchX;
lastTouchY=(int)initialTouchY;
Log.e(“ashish”,“ACTION\u DOWN lasttouchX:+lasttouchX”);
Log.e(“ashiosh”,“动作”+“最后触碰”);
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(!isMoved
&&event.getAction()!=MotionEvent.ACTION\u UP){
//执行长单击操作
}
}
});
}
}, 1000);
打破
}
case MotionEvent.ACTION\u移动:{
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams)v
.getLayoutParams();
params.leftMargin=(int)initialTouchX-deltaX;
params.topMargin=(int)initialTouchY-deltaY;
v、 setLayoutParams(参数);
打破
}
case MotionEvent.ACTION\u UP:{
如果((lastTouchX==(int)initialTouchX)
&&(lastTouchY==(int)initialTouchY)){
isMoved=假;
}else if((lastTouchX>(int)initialTouchX)){
如果(((lastTouchX-(int)initialTouchX)尝试此触控事件
public boolean onTouchEvent(MotionEvent event) {
if (event.getPointerCount() == 2) {
int action = event.getAction();
int pure = action & MotionEvent.ACTION_MASK;
if (pure == MotionEvent.ACTION_POINTER_DOWN) {
mBaseDist = getDistanceevent(event);
mBaseRatio = mRatio;
} else {
float delta = (getDistanceevent(event) - mBaseDist) / STEP;
float multi = (float) Math.pow(2, delta);
mRatio = Math.min(1024.0f, Math.max(0.1f, mBaseRatio * multi));
mytv.setTextSize(mRatio + 13);
}
}
return true;
}
int getDistanceevent(MotionEvent event) {
int dx = (int) (event.getX(0) - event.getX(1));
int dy = (int) (event.getY(0) - event.getY(1));
return (int) (Math.sqrt(dx * dx + dy * dy));
}
public boolean onTouch(View v, MotionEvent event) {
return false;
}
两者都是int变量