有关Android中的ImageView上的触摸坐标的查询

问题描述:

我在ImageView中有一个图像。当我触摸图像时,我需要知道图像的确切(x,y)坐标。我也想在触摸的地方画一个圆圈。有关Android中的ImageView上的触摸坐标的查询

下面给出的是我使用的代码。我有一个ImageView,我附加了一个onTouchListener。

问题是这样的:

  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()方法绘制,保证一切都在同一个调整后的坐标平面上。

从代码中看不出来,为什么这个操作只能正常工作三次。也许您只需在您感兴趣的DOWN实例中尝试从触摸检测方法返回true。您可能不必要地窃取了当前实现的触摸事件。

HTH

+0

谢谢,工作很好。我不知道为什么它只有3次! – Ahsan

+0

但是,如果我放大图像,绘制的圆圈会移开...坐标改变...无论如何要使圆圈绘制永久性的? – Ahsan