java - Android屏幕坐标到 Canvas View 坐标

标签 java android matrix android-canvas

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

所以我从我的触摸监听器触发的 MotionEvent 中获取我的屏幕 X 和 Y 坐标。

我认为它应该像将那些乘以用于在 Canvas 上绘制的矩阵一样简单,所以我在创建 View 时创建了 Matrix 实例

matrix = new Matrix();

void onDraw(Canvas 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);

View 看起来应该如此,但是在我的触摸监听器上,我尝试使用 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 附言。除了在我的 onDraw 代码中,我没有在其他任何地方接触矩阵

最佳答案

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

当我转换 Canvas 时矩阵也没有转换所以我不得不 canvas.get(matrix)

为了获得 Canvas 使用的相同矩阵..

关于java - Android屏幕坐标到 Canvas View 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310507/

相关文章:

android - 自定义对话框android中的图标

java - 重复的条目:gms/auth/api/signin/internal/zzf.class

java - Mojave 上缺少 MacOS Java 控制面板

java - 如何使用Spark处理CSV数据并输出序列化的自定义JavaObject?

Android Gradle 'versionCode' 未从环境变量中读取

python - 如何编写一个 python 函数来最大化给定 2N X 2N 矩阵中 N X N 左上子矩阵的总和?

r - 创建一个图来显示值是否匹配

c - 读入文件c小错误大问题

java - gcp 数据流流程元素不会转到下一个 ParDO 函数

java - 是否可以从堆转储中的 hprof 转储/线程查看线程