有关Android中的ImageView上的触摸坐标的查询
问题描述:
我在ImageView中有一个图像。当我触摸图像时,我需要知道图像的确切(x,y)坐标。我也想在触摸的地方画一个圆圈。有关Android中的ImageView上的触摸坐标的查询
下面给出的是我使用的代码。我有一个ImageView,我附加了一个onTouchListener。
问题是这样的:
- 我得到奇怪的(X,Y)值
-
新的社交圈只画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
谢谢,工作很好。我不知道为什么它只有3次! – Ahsan
但是,如果我放大图像,绘制的圆圈会移开...坐标改变...无论如何要使圆圈绘制永久性的? – Ahsan