【问题标题】:mismatch of event coordinates and view coordinates in Android?Android中的事件坐标和视图坐标不匹配?
【发布时间】:2010-06-30 18:11:19
【问题描述】:

我一直在尝试编写一个在 Android 中识别自定义事件的小应用程序:您将手指放在 TextView 上一段时间,它会改变颜色。我正在使用 MotionEvent 坐标并检查它们是否在表格内的特定 TextView 的范围内。

private boolean checkBounds(TextView v, MotionEvent event) {

        int[] origin = new int[2];
        v.getLocationOnScreen(origin);

        if ((event.getX() > origin[0]) && (event.getX() < (origin[0] + v.getMeasuredWidth()))) {
            if ((event.getY() > origin[1]) && (event.getY() < (origin[1] + v.getMeasuredHeight()))) {
                return true;
            }
        }
        return false;
    }

我只是将 onTouch 侦听器附加到活动中的表。但我得到了奇怪的错误:坐标似乎被一个视图关闭(即,如果我触摸下面的视图,上面的视图会做出反应);或者有时一个人会做出反应,而另一个人不会。知道会发生什么吗?

【问题讨论】:

    标签: android events coordinates touch


    【解决方案1】:

    我通常会因为通知栏的大小而发生......尝试这样做:

    private boolean checkBounds(TextView v, MotionEvent event) {
        // here you will have to get a reference of the global view (the View that holds the UI)
        View globalView = ...; // the main view of my activity/application
        DisplayMetrics dm = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(dm);
        int topOffset = dm.heightPixels - globalView.getMeasuredHeight();
    
            int[] origin = new int[2];
            v.getLocationOnScreen(origin);
    
        final int x = origin[0];
        final int y = origin[1] - topOffset;
    
    
            if ((event.getX() > x) && (event.getX() < (x + v.getMeasuredWidth()))) {
                if ((event.getY() > y) && (event.getY() < (y + v.getMeasuredHeight()))) {
                    return true;
                }
            }
        return false;
    }
    

    无论如何...我确信有更好的方法来实现您想要的。据我所知,TextViews 能够发送OnClik 事件。

    【讨论】:

    • 谢谢,效果很好!顺便说一句,我正在使用自己的事件框架,因为单击不是标准单击(它是一秒钟的保持,以滑动结束)。谢谢,尼克。
    【解决方案2】:

    使用 getRawX() getRawY() 似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2020-07-16
      • 1970-01-01
      • 2018-02-27
      • 2020-02-29
      相关资源
      最近更新 更多