Android:如何找出窃取我的触摸事件的 View ?

标签 android

我有一个底部抽屉 - 一个底部与屏幕底部对齐的 View ,当被关闭时,它会自动向下动画直到它变得不可见(在这种状态下,它的顶部边框与屏幕底部对齐)。我正在尝试通过垂直向下滑动来消除此 View 。为此,我在 View 的这种方法中附加了一个手势检测器:

  @Override
  public boolean onInterceptTouchEvent(MotionEvent event) {
    return mGestureDetector.onTouchEvent(event);
  }

我这样做是因为这个 View 包含一个水平回收器 View ,所以我不想过早拦截 child 的触摸,以确保我的 View 只响应向下滑动并且不会从回收器 View 中窃取水平触摸(如此处所述: https://developer.android.com/training/gestures/viewgroup.html)

现在,我的问题是,当我在该 View 的一个区域上滑动时,快速识别有效,而当我在该 View 的另一个区域上滑动时,它不起作用。在第一种情况下,我在调试器中看到 onInterceptTouchEvent 被调用了三次,第三次调用被手势识别器识别为 fling。在第二种情况下,我看到 onInterceptTouchEvent 只被调用一次。

看起来其他一些观点正在窃取我的灵感,但我不知道是哪一个,因为我的应用程序非常复杂,而且我不是唯一的作者 :)。在一般情况下,调试的简单方法是什么?我只想知道我的 Activity 的整个层次结构中的哪个 View 消耗了我的事件,只调用了一次 onInterceptTouchEvent - 这将是进一步调查的良好开端。

谢谢!

最佳答案

我这样做的方法是使用模拟器下载android源代码。

我在 View.dispatchTouchEvent 中放置了一个断点(所有返回 true 的地方)。这将告诉我哪个 View 正在处理该事件。

如果这没有帮助,您还可以放置各种断点日志消息。

我希望这可以帮助您解决问题:D

关于Android:如何找出窃取我的触摸事件的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844992/

相关文章:

android - 在 ViewPager 中的 fragment 上调用方法

Android ListView 在数据下载之前加载 - 必须重新启动 View

android - 安卓条形码/二维码阅读器

android - 如果有 getArguments(),我们是否应该在 fragment 中使用 savedInstanceState?

android - 使用谷歌表格 api

android - 添加 Xam.Plugin.Connectivity GooglePlayconsole 后的 Xamarin Forms 对签名 APK 用户功能发出警告

android - 自定义listitem点击不触发listview.onclicklistener

android - 如果您有 Facebook 应用程序,是否可以通过 Android 上的 Facebook api 注销?

android - 绘制到现有 View

android - multidex 问题,显示在 dexpathlist 中找不到类