преобразовать значение касания в точки на основе матрицы - PullRequest
2 голосов
/ 26 января 2012

Я перевожу и масштабирую изображение по матрице, теперь у меня есть значения матрицы. поэтому из значения матрицы я хочу преобразовать свои координаты касания в его положение, которое получается по матрице. так что я должен сделать для этого? пожалуйста, помогите мне как можно скорее.

private void drawPoint(float x, float y, float pressure, float width) {

 // left is tx of matrix 
     // top is ty of matrix

    float curX = (x - left) / (scale * scale);
    float curY = (y - top) / (scale * scale);

         canvas.drawPoint((curX - left), (curY - top) , mPaint);
}

1 Ответ

6 голосов
/ 24 декабря 2012

Я знаю, что это старый пост, но у меня была та же проблема.

У меня есть изображение, к которому применяется матричное преобразование, сначала я изменяю его размер, а затем делаю перевод.

    image = new Matrix();
    image.setScale(zoom, zoom);

    Paint drawPaint = new Paint();
    drawPaint.setAntiAlias(true);
    drawPaint.setFilterBitmap(true);

    float centerScaledWidth = image_center.x * zoom / 2;
    float centerScaledHeigth = image_center.y * zoom / 2;

    image.postTranslate(screen_center.x -  centerScaledWidth, 
            screen_center.y - centerScaledHeigth);

    canvas.drawBitmap(bmp, image, drawPaint);

Чтобы коснуться точек на изображении, я получаю след от матрицы image , и это метод:

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

            final int action = ev.getAction();

            switch (action & MotionEvent.ACTION_MASK) {

                    case MotionEvent.ACTION_DOWN: {

                        final float x = ev.getX();
                        final float y = ev.getY();

                        float[] pts = {x, y};

                        Matrix m = new Matrix();

                        // This is the magic, I set the new matrix m 
                        // as the inverse of 
                        // the matrix applied to the image
                        image.invert(m);

                        // transform the points using the inverse matrix
                        m.mapPoints(pts);

                        // do what you have to do
                        .......

                        Log.i("transformed", pts[0] +" "+pts[1]);

                        break;
                    }

            }

    return super.onTouchEvent(ev);
}
...