Использование matrix.mapPoints (). Я хочу преобразовать экранную координату в матричную точку изображения. Какие-либо предложения? - PullRequest
0 голосов
/ 31 октября 2018

Итак, у меня есть собственный ImageView на экране, , к которому применяются жесты масштабирования и перемещения с использованием преобразования матрицы . Прямо в центре пользовательского Imageview находится красный маркер, подобный imageview * (смотрите на скриншоте) . Теперь, когда я нажимаю кнопку «Добавить контрольную точку», зеленая точка должна появиться на холсте точно под маркером, как изображение, и должна придерживаться изображения и двигаться, когда я масштабирую или перемещаю изображение. Я сделал это с помощью matrix.mapPoints (). Проблема в том, что точка не отображается точно под маркером, даже если я передал координаты изображения маркера в функцию mapPoints ().

onНажмите кнопку «Добавить контрольную точку» -

 checkpointBt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            iv.drawRect = true;
            iv.x = marker_iv.getX();  //marker_iv is red marker imageview
            iv.y = marker_iv.getY();
            iv.invalidate();
        }
    });

Пользовательский класс ImageView -

public class DrawImageView extends ImageView {

private Paint currentPaint;
public boolean drawRect = false;
public float x;
public float y;
public Bitmap newBitmap;
public Matrix matrix;


public DrawImageView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    currentPaint = new Paint();
    currentPaint.setDither(true);
    currentPaint.setColor(0xFF00CC00);
    currentPaint.setStyle(Paint.Style.STROKE);
    currentPaint.setStrokeJoin(Paint.Join.ROUND);
    currentPaint.setStrokeCap(Paint.Cap.ROUND);
    currentPaint.setStrokeWidth(60);
}


@SuppressLint("NewApi")
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (drawRect) {



        float[] pts = {x, y};
        Matrix matrix = this.getImageMatrix();
        matrix.mapPoints(pts);
        System.out.println("Rushi : NewPoint : " + pts[0] + "," + pts[1]);
        canvas.drawPoint(pts[0], pts[1], currentPaint);
    }
}

}

As you can see, the green dot doesn't appear right below the red marker

...