有没有办法在不使用矩阵的情况下实现平滑缩放?
我正在构建绘图应用程序,我希望它有缩放缩放。
我获得了缩放的支点:
centerposX = mScaleDetector.getFocusX();
centerposY = mScaleDetector.getFocusY();
然后进行缩放,我使用:
canvas.scale(scaleFactor, scaleFactor, centerposX, centerposY);
但问题是,它会立即将视图置于枢轴点中心,并将其放大,而不是将其用作居中的指南。
我已经看到这个问题已经通过使用矩阵解决了,但是我不想使用它们,因为我需要跟踪偏移,ZoomTranslations是从centerposX / Y和scaleFactor到将图纸放在屏幕上。
那么有没有办法顺利解决这个支点问题?
谢谢!
答案 0 :(得分:2)
一周之后,我明白我需要使用矩阵并在屏幕上获得绝对坐标,所以我使用手势检测器来设置矩阵比例
matrix.postScale(mScaleFactor, mScaleFactor, focusX, focusY);
在我的onDraw方法中,我使用了canvas.concat(matrix);
,所以不仅是Bitmap,而且是WHOLE canvas得到的矩阵变换,并且为了得到真正的屏幕坐标,我使用了在堆栈溢出时找到的方法:
public float[] getAbsolutePosition(float Ax, float Ay) {
matrix.getValues(m);
float x = width - ((m[Matrix.MTRANS_X] - Ax) / m[Matrix.MSCALE_X])
- (width - getTranslationX());
float y = height - ((m[Matrix.MTRANS_Y] - Ay) / m[Matrix.MSCALE_X])
- (height - getTranslationY());
return new float[] { x, y };
}
我每次都在onTouchEvent()方法中调用它,提供event.getX和event.getY()作为参数。
在那之后,一切都很容易,也是因为这个美丽的方法,我已经摆脱了4-5个变量,我不得不用它来找到真正的触摸位置。