【问题标题】:Android Screen coordinates to canvas view coordinatesAndroid屏幕坐标到画布视图坐标
【发布时间】:2013-02-24 23:19:54
【问题描述】:

我正在尝试将我的屏幕 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 代码,我没有在其他任何地方触摸矩阵

【问题讨论】:

    标签: java android matrix android-canvas


    【解决方案1】:

    我脑海中的问题是倒置的,当我在休息后(8小时后……)再次想到这个问题时,我明白了,我必须倒置矩阵才能执行此操作。

    当我在转换画布时矩阵没有被转换,所以我不得不 canvas.get(matrix)

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

    【讨论】:

      【解决方案2】:

      这可能对其他人有所帮助:

      在 onDraw() 中

      canvasMatrix.postScale(mScaleFactor, mScaleFactor);
      canvasMatrix.postTranslate(-getWidth() / 2, -getHeight() / 2);
      canvas.setMatrix(canvasMatrix);
      

      您需要映射坐标的其他地方:

        Matrix m = new Matrix();
        canvasMatrix.invert(m);
      
        float[] touch = new float[] { X, Y };
        m.mapPoints(touch);
      
        X = touch[0];
        Y = touch[1];
      

      你去。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多