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

标签 android android-imageview ontouchlistener

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

下面给出了我使用的代码。我有一个 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 的位置被调整为相对于包含 View (ImageView在这种情况下),看起来您正试图将它们绘制在另一个具有不同坐标空间的 Canvas 上。如果您需要像这样将两者分开,我建议使用 MotionEvent.getRawX()MotionEvent.getRawY() 以便触摸值位于整个屏幕。

但是,如果您只想在图像上绘制圆圈,更好的解决方案是将 ImageView 子类化,这样您就可以在其 onTouchEvent() 方法中检测触摸直接(而不是监听器)并在其 onDraw() 方法中进行自定义绘制,保证所有内容都在同一调整后的坐标平面中。

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

HTH

关于android - 查询有关 Android 中 ImageView 上的触摸坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301913/

相关文章:

java - 方向更改时 fragment 重新启动

android - In App Billing getPrice() Android

android - 滚动时 RecyclerView 项目大小发生变化

android - 如何从 url 保存图像?

android - FrameLayout 正在缩小 ImageView ,但相机在 FrameLayout 内正确打开

android - View 的 Ontouch 方法中的单点触摸检测

java - 访问 setOnTouchListener 中的循环变量

java - Gradle 包装器版本问题

java - OnTouchListener返回值

android - 来自自定义属性的可绘制资源