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

Moving a View with ACTION_MOVE in Scaled Layout

您好!感谢您的阅读。

根据this的回答,我集成了视图拖动:

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 时才会出现此问题。

.

非常感谢您的帮助!

为了进一步参考,这种情况可以通过将父级的比例应用于两次出现的 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 外壳放在开关的前面。

我想这个解决方案背后的原因可以由 "view positioning methods know how to handle scaling, touch callback methods don't" 模糊地解释。

希望这会有所帮助!