Android 屏幕坐标到画布视图坐标

2024-04-21

我正在尝试将屏幕 x 和 y 坐标转换为用于在屏幕上绘制的坐标。

因此,我从触摸侦听器触发的 MotionEvent 获取屏幕 X 和 Y 坐标。

我认为它应该像将它们乘以用于在画布上绘制的矩阵一样简单,所以我在创建视图时创建了 Matrix 实例

matrix = new Matrix();

when 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

enter image description here Ps. I am not touching matrix anywhere else than in my onDraw code


我脑子里的问题被颠倒了,当我在休息后(8小时后......)再次思考这个问题时,我明白了,我必须颠倒矩阵才能执行此操作。

当我转换画布时,矩阵也没有转换,所以我必须canvas.get(matrix)

为了获得与画布使用的相同的矩阵..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 屏幕坐标到画布视图坐标 的相关文章

随机推荐