在缩放布局中使用ACTION_MOVE移动视图

时间:2018-08-25 04:37:05

标签: android android-view ontouchlistener ontouch drag

你好!谢谢您的阅读。

基于 this 的答案,我像这样集成了View拖动:

float dX, dY;

@Override
public boolean onTouch(View view, MotionEvent event) {

    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            break;

        case MotionEvent.ACTION_MOVE:

            setX(event.getRawX() + dX);
            setY(event.getRawY() + dY);
            break;

        default:
            return false;
    }  return true;
}

但是,视图相对于我手指的位置会与父级布局的比例成比例地偏移。换句话说,当我开始放大布局时,视图拖动会中断。

我已经调试了很多时间,看来即使知道父级布局比例(例如 dScale ),我也无法以固定的方式使用该值完全抵消。

我什至无法达到手指和视图之间的距离恒定的位置。

请注意,只有当父母的比例尺不等于1时,该问题才可见。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为进一步参考,可以通过在两次出现时将父级的缩放比例应用于getRawX()方法来解决这种情况。我以某种方式没有尝试过...

float dX, dY;

@Override
public boolean onTouch(View view, MotionEvent event) {

    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

            dX = view.getX() - event.getRawX() / dScale;
            dY = view.getY() - event.getRawY() / dScale;
            break;

        case MotionEvent.ACTION_MOVE:

            setX(event.getRawX() / dScale + dX);
            setY(event.getRawY() / dScale + dY);
            break;

        default:
            return false;
    }  return true;
}

我还建议先将MOVE盒放在开关中。

我想可以通过“视图定位方法知道如何处理缩放,触摸回调方法不知道”来模糊地解释该解决方案的原因。

希望这会有所帮助!