查询Android中图像视图上的触摸坐标
-
25-10-2019 - |
题
我在ImageView中有一个图像。当我触摸图像时,我需要知道图像的确切(x,y)坐标。我也想在接触场所画一个圆圈。
下面给出的是我使用的代码。我有一个ImageView,并将其附加到它上。
问题是:
- 我变得很奇怪(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()
方法,确保一切都处于相同的调整坐标平面中。
从您的代码中看不明,为什么此操作只能正确工作3次。也许只尝试返回 true
从您感兴趣的Down实例中的触摸检测方法中。您可能会不必要地窃取当前实现的触摸事件。
Hth
不隶属于 StackOverflow