我正在做我的uni项目,我必须在用户触摸的图像(在这种情况下为人体)中标记位置。
通过使用以下代码,我已经具有用户单击位置的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;
}
});
我的问题是,现在我已经有了坐标,如何在图像视图的那个位置放置一个标记,以便获得如下所示的结果图像
答案 0 :(得分:1)
如@ raldone01所述
创建自定义图像视图。覆盖onTouchEvent。存储位置。使视图无效。覆盖onDraw并使用存储的位置在画布上的所需位置绘制一个圆
即,将ViewView替换为View
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;
}
}