【发布时间】:2014-11-05 13:49:50
【问题描述】:
我编写了a simple test app,其中Drawable 对象(下面屏幕截图中的黄色半透明图块)可以在可滚动和可缩放(通过使用矩阵)画布上拖动:
这里是处理拖拽的代码:
private Drawable mDragged = null;
private float mPrevX;
private float mPrevY;
public boolean onTouchEvent(MotionEvent e) {
// Convert touch coordinates to Canvas coordinates
float[] point = new float[] {e.getX(), e.getY()};
Matrix inverse = new Matrix();
mMatrix.invert(inverse);
inverse.mapPoints(point);
float x = point[0];
float y = point[1];
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
Drawable tile = hitTest(x, y);
if (tile != null) {
mDragged = tile;
mPrevX = x;
mPrevY = y;
return true;
}
break;
case MotionEvent.ACTION_MOVE:
if (mDragged != null) {
float dX = x - mPrevX;
float dY = y - mPrevY;
mPrevX = x;
mPrevY = y;
Rect rect = mDragged.copyBounds();
rect.left += dX;
rect.top += dY;
rect.right = rect.left + mDragged.getIntrinsicWidth();
rect.bottom = rect.top + mDragged.getIntrinsicHeight();
mDragged.setBounds(rect);
invalidate();
return true;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (mDragged != null) {
mDragged = null;
return true;
}
break;
}
// Handle Canvas scrolling and scaling here
}
它可以工作,但我有一个问题 - 当我触摸一个磁贴然后拖动它时 - 磁贴离开我的手指(或使用 Android 模拟器时从我的鼠标指针)。
即被拖动的Drawable 与手指(或鼠标指针 - 如上面的屏幕截图所示)之间的距离在被拖动时会增加。
这不能是a multi-touch related issue - 因为模拟器上只有单点触控。
这里的根本原因是什么?
【问题讨论】:
标签: android canvas android-canvas drag android-drawable