在android中,如何在多文本视图上手动收缩放大和缩小?

在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

如何在framelayout中的多个文本视图上手动拖放?
我已经添加了两个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变量