我在 ImageView 中有一张图片。当我触摸图像时,我需要知道图像的确切 (x,y) 坐标。我也想在触摸的地方画一个圆圈。
下面给出了我使用的代码。我有一个 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
的位置被调整为相对于包含 View (ImageView
在这种情况下),看起来您正试图将它们绘制在另一个具有不同坐标空间的 Canvas
上。如果您需要像这样将两者分开,我建议使用 MotionEvent.getRawX()
和 MotionEvent.getRawY()
以便触摸值位于整个屏幕。
但是,如果您只想在图像上绘制圆圈,更好的解决方案是将 ImageView
子类化,这样您就可以在其 onTouchEvent()
方法中检测触摸直接(而不是监听器)并在其 onDraw()
方法中进行自定义绘制,保证所有内容都在同一调整后的坐标平面中。
从您的代码中看不出为什么此操作只能正确运行 3 次。也许只尝试从您感兴趣的 DOWN 实例中的触摸检测方法返回 true
。您可能会在当前实现中不必要地窃取触摸事件。
HTH
关于android - 查询有关 Android 中 ImageView 上的触摸坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301913/