Как добавить красную точку на изображении в определенных координатах изображения? - PullRequest
0 голосов
/ 08 июня 2019

Я работаю над своим унифицированным проектом, где мне нужно отметить положение на изображении (в данном случае, человеческое тело), ​​к которому обращается пользователь. enter image description here

У меня уже есть координаты X и Y той позиции, где пользователь нажал, используя следующий код

mbody.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent e) {
            if (e.getAction() == MotionEvent.ACTION_DOWN) {
                Toast.makeText(getApplicationContext(),String.valueOf(e.getX())+","+
                        String.valueOf(e.getY()),Toast.LENGTH_LONG).show();
                return true;
            }
            return false;
        }
    });

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

enter image description here

1 Ответ

1 голос
/ 08 июня 2019

как упомянуто @ raldone01

Создать пользовательский вид изображения. Переопределите onTouchEvent. Сохраните позицию. Неправильный взгляд. Переопределите onDraw и используйте сохраненную позицию, чтобы нарисовать круг на холсте в желаемой позиции

т.е. замените ваш ImageView на вид ниже

public class MyIV extends AppCompatImageView {

private int x = 0;
private int y = 0;
private Paint paint = new Paint();
private float radius = 20;


public MyIV(Context context) {
    super(context);
    init();
}

public MyIV(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyIV(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}



private void init(){
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawCircle(x,y,radius,paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            x = (int)event.getX();
            y = (int)event.getY();
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            x = (int)event.getX();
            y = (int)event.getY();
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            x = (int)event.getX();
            y = (int)event.getY();
            invalidate();
            break;
    }
    return true;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...