canvas.scale с осью, координаты мыши - PullRequest
0 голосов
/ 08 февраля 2020

Я пытался получить координаты мыши из масштабированного холста. Canvas.scale (scale, scale) дает мне правильные координаты, но если я использую canvas.scale (scale, scale, pivotX, pivotY), координаты неправильные.

//onDraw
canvas.scale(scaleFactor, scaleFactor); //default pivot x & y = 0, 0
//canvas.scale(scaleFactor, scaleFactor, pivotX, pivotY);

private float pixelWidth = 480;
private float pixelHeight = 320; 

//onTouchEvent
touchX = (int) event.getX() * pixelWidth / getWidth();
touchX = (int) event.getY() * pixelHeight / getHeight();

worldX = touchX / scaleFactor;
worldY = touchY / scaleFactor;

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

1 Ответ

0 голосов
/ 09 февраля 2020

решил это используя матрицу и этот код из { ссылка }

Matrix matrix = new Matrix();

public void render(Canvas canvas) {
    canvas.save();

    matrix.setScale(mScaleFactor, mScaleFactor, pivotX, pivotY);
    canvas.setMatrix(matrix);
...

float[] mv = new float[9];

@Override
public boolean onTouchEvent(MotionEvent event) {

    // Get the values from the matrix into the float array
    matrix.getValues(mv);

    float touchX = (event.getX()*(1/mv[4]) - (mv[2]/mv[4]));
    float touchY = (event.getY()*(1/mv[4]) - (mv[5]/mv[4]));
...
...