在缩放布局中使用 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" 模糊地解释。
希望这会有所帮助!
您好!感谢您的阅读。
根据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" 模糊地解释。
希望这会有所帮助!