Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在图像视图的特定坐标处添加红点?_Android_Android Layout_Imageview - Fatal编程技术网

Android 如何在图像视图的特定坐标处添加红点?

Android 如何在图像视图的特定坐标处添加红点?,android,android-layout,imageview,Android,Android Layout,Imageview,我正在进行我的uni项目,在这个项目中,我必须标记用户接触到的人体图像中的位置。 我已经用下面的代码得到了用户点击位置的X和Y坐标 mbody.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent e) { if (e.getAction() == MotionEvent.ACTION_

我正在进行我的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;
        }
    });
现在我的问题是,我已经有了坐标,我如何才能在imageview的那个位置放置一个标记,以便获得下面给出的结果图像


如@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;
}

}

创建自定义图像视图。覆盖onTouchEvent。存储该位置。使视图无效。覆盖onDraw并使用存储的位置在画布上所需的pos调用super处绘制一个圆圈。问题是关于java还是kotlin?应该是有用的。一种替代方法是在布局顶部使用透明的ConstraintLayout覆盖人体,并根据X和Y定位带有红点的图像视图。例如使用指南。@raldone01 JAVA MotionEvent.ACTION\u是否故意返回false?初始化时,这不会在左上角画一个圆圈吗?不会,它只会通知视图没有使用action up事件。为什么不使用该事件?