在android中移动,旋转和调整edittext的大小

时间:2017-03-27 12:16:26

标签: android android-edittext rotation resize ontouchlistener

我需要根据用户的触摸手势移动,旋转和调整edittext的大小。

这就是我正在做的事情。 1.听取ACTION_DOWN事件以检测单指触摸,然后将其用于移动。

  1. 侦听ACTION_POINTER_DOWN,并获取索引计数以检测两个手指触摸,然后使用ACTION_MOVE进行旋转。

  2. 我需要调整大小,使得只有通过触摸调整大小才会减小宽度。

  3. 我面临的问题 运动完美无缺。但是当我使用ACTION_POINTER_DOWN应用旋转时,旋转会发生各种各样的乱码。关于如何使视图移动和旋转一起工作的任何建议?

    以下是我已应用的touchListener的代码

    tvMain.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
    
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        moving = true;
                        break;
    
                    case MotionEvent.ACTION_POINTER_DOWN:
    
                        Log.d("ActionPointerIndex", "" + event.getActionIndex());
                        int index = event.getActionIndex();
                        moving = false;
    
                        //FOR ROTATION DETAILS
                        xc = tvMain.getWidth() / 2;
                        yc = tvMain.getHeight() / 2;
    
                        x_ = event.getX();
                        y_ = event.getY();
    
                        Log.d("currentAnglePD", ": " + x_ + "," + y_);
                        if (index == 1) {
                            rotate = true;
                            mCurrAngle = Math.toDegrees(Math.atan2(x_ - xc, yc - y_));
                            moving = false;
                        }
                        break;
    
                    case MotionEvent.ACTION_MOVE:
    
                        if (moving) {
                            leftBound = rootView.getX();
                            topBound = rootView.getY();
                            rightBound = rootView.getX() + 1280;
                            bottomBound = rootView.getY() + 618;
    
    
                            x = event.getRawX() - tvMain.getWidth() / 2;
                            y = event.getRawY() - tvMain.getHeight();
    
                            dx = Float.valueOf(rootView.getWidth() - tvMain.getWidth());
                            dy = Float.valueOf(rootView.getHeight() - tvMain.getHeight());
    
                            bottomBound_ = tvMain.getY() + tvMain.getHeight();
                            rightBound_ = tvMain.getX() + tvMain.getWidth();
    
                            if (x >= leftBound && y >= topBound && x <= dx && y <= dy) {
                                tvMain.setX(x);
                                tvMain.setY(y);
                            }
                        }
    
                        if (rotate) {
    
                            Log.d("currentAngleMove", ": " + x_ + "," + y_);
    
                            mPrevAngle = mCurrAngle;
                            mCurrAngle = Math.toDegrees(Math.atan2(x_ - event.getX(), yc - event.getY()));
                            animate(mPrevAngle, mCurrAngle, 0);
                            System.out.println(mCurrAngle);
                        }
    
                        break;
    
                    case MotionEvent.ACTION_POINTER_UP:
                        rotate = false;
                        break;
    
                    case MotionEvent.ACTION_UP:
                        rotate = false;
                        moving = false;
                        //tvMain.clearAnimation();
                        break;
                }
    
                return true;
            }
        });
    

    运动正常,但是一旦我移动视图,旋转就会变得混乱,并且它不会沿着它的中心旋转。一旦我停止旋转,视图就会停止侦听任何更多的触摸手势。

1 个答案:

答案 0 :(得分:1)

无需代码,但请查看此链接:

Sensey Library

这对您解决问题绝对有用。