我正在尝试将我的屏幕 x 和 y 坐标转换为用于在屏幕上绘制的坐标。
所以我从我的触摸监听器触发的 MotionEvent 中获取我的屏幕 X 和 Y 坐标。
我认为它应该像将这些乘以用于在画布上绘制的矩阵一样简单,所以我在创建视图时创建了 Matrix 实例
matrix = new Matrix();
当void onDraw(Canvas canvas)
被调用时,我将画布的矩阵设置为我在构造函数上创建的矩阵,并将我的所有转换应用于矩阵
matrix.reset();
canvas.setMatrix(matrix);
canvas.translate(getWidth() / 2, getHeight() / 2);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.translate(-getWidth() / 2, -getHeight() / 2);
canvas.translate(-x, -y);
视图看起来应该是这样,但是当在我的触摸侦听器上时,我尝试使用mapPoints(float[] points)
它提供的值将屏幕坐标转换为使用该矩阵查看坐标不正确,我在 onDraw 中的 0、0 上绘制十字
canvas.drawLine(0f, -100f, 0f, 100f, viewportPaint);
canvas.drawLine(-100f, 0f, 100, 0f, viewportPaint);
当我点击缩放后它出现的位置时,我收到的值甚至不接近 0、0
float[] array = new float[]{e.getX(), e.getY()};
matrix.mapPoints(array);
Log.v(TAG, "points transformed are " + array[0] + ", " + array[1]);
当我在清楚地单击 0、0 标记的地方拍摄这张照片时,我收到了以下日志记录:
03-09 14:08:48.803: V/XXXX(22181): points transformed are 403.43967, 628.47
附言。除了在我的 onDraw 代码中,我没有在其他任何地方触摸矩阵