我在ImageView中有一个图像。当我触摸图像时,我需要知道图像的确切(x,y)坐标。我也想在接触场所画一个圆圈。

下面给出的是我使用的代码。我有一个ImageView,并将其附加到它上。

问题是:

  1. 我变得很奇怪(x,y)值
  2. 新圆圈仅绘制3次。之后,没有绘制新的圆圈!

    ImageView touch=(ImageView) findViewById(R.id.image);
    touch.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN){
    
               //Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
               //Canvas can=new Canvas(bm);
               p.setColor(Color.RED);
               float fx=event.getX();
               float fy=event.getY();
               can.drawCircle(fx, fy, 20, p);                   
            }
            return true;
        }
    });
    
有帮助吗?

解决方案

问题很可能是您没有考虑到事实 MotionEvent 调整为相对于包含视图( ImageView 在这种情况下),看起来您正在尝试将它们绘制在另一个 Canvas 它将具有不同的坐标空间。如果您需要这样的两个人,我建议您使用 MotionEvent.getRawX()MotionEvent.getRawY() 因此,触摸值在整个屏幕的坐标中。

但是,如果您只想在图像上绘制圆圈,那么更好的解决方案是子类 ImageView 因此您可以在其中检测到触摸 onTouchEvent() 方法直接(而不是听众),并在其中进行自定义绘图 onDraw() 方法,确保一切都处于相同的调整坐标平面中。

从您的代码中看不明,为什么此操作只能正确工作3次。也许只尝试返回 true 从您感兴趣的Down实例中的触摸检测方法中。您可能会不必要地窃取当前实现的触摸事件。

Hth

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top