Android 缩放画布后获取画布中的特定位置
我需要点击画布上的特定项目,同时缩放和移动功能也可以用于画布。我可以在移动画布时计算矩形的位置。在这里,我只是通过(CurrenTouchXPosition-StartXPosition)计算触摸移动距离 那么Android 缩放画布后获取画布中的特定位置,android,canvas,position,touch,zooming,Android,Canvas,Position,Touch,Zooming,我需要点击画布上的特定项目,同时缩放和移动功能也可以用于画布。我可以在移动画布时计算矩形的位置。在这里,我只是通过(CurrenTouchXPosition-StartXPosition)计算触摸移动距离 那么 switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "action up");
secondRectUpperX = secondRectUpperX + moveOffsetX;
secondRectBottomX = secondRectBottomX + moveOffsetX;
secondRectUpperY = secondRectUpperY + moveOffsetY;
secondRectBottomY = secondRectBottomY + moveOffsetY;
这可以识别矩形的新画布位置。这很好用。通过此逻辑,我可以在移动画布时识别特定项目的触摸事件。
但是现在我需要在缩放画布之后计算相对于画布的矩形位置。变焦背后的数学是什么。如果有人知道,请帮忙。
谢谢。最后我想出了一个解决办法 我将触摸屏坐标转换为画布坐标
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
...
break;
case MotionEvent.ACTION_POINTER_DOWN:
...
break;
case MotionEvent.ACTION_UP:
float []m = new float[9];
matrix.getValues(m);
float transX = m[Matrix.MTRANS_X] * -1;
float transY = m[Matrix.MTRANS_Y] * -1;
float scaleX = m[Matrix.MSCALE_X];
float scaleY = m[Matrix.MSCALE_Y];
lastTouchX = (int) ((event.getX() + transX) / scaleX);
lastTouchY = (int) ((event.getY() + transY) / scaleY);
lastTouchX = Math.abs(lastTouchX);
lastTouchY = Math.abs(lastTouchY);
我可以根据画布坐标得到触摸位置坐标。因为我知道绘制对象的坐标,所以我检查触摸位置是否在绘制对象的范围内
if((lastTouchX>=firstRectUpperX && firstRectBottomX>=lastTouchX) && (lastTouchY>=firstRectUpperY && firstRectBottomY>=lastTouchY)) {
isbtn1Clicked = true;
}
if((lastTouchX>=firstRectUpperX && firstRectBottomX>=lastTouchX) && (lastTouchY>=firstRectUpperY && firstRectBottomY>=lastTouchY)) {
isbtn1Clicked = true;