Итак, у меня есть собственный 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);
}
}
}