作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 GestureListener 类在 onSingleTap() 或 onFling() 等方法中接收 MotionEvent。有没有办法从这个事件中确定底层 View ?
背景:我有一个包含许多 subview 的 LinearLayout。这个 LinearLayout 有一个触摸监听器,它调用手势检测器。因此,当用户在任何 subview 上做手势时,LinearLayout 的手势检测器会收到一个 MotionEvent。但问题是,因为有很多 child ,我需要确切地知道用户点击了哪个 child 。但是我找不到将坐标转换为 View 的方法。有办法做到这一点吗?
一个丑陋的解决方案:动态添加子项。所以我可以将所有的 child 都放在一个列表中,然后当 MotionEvent 出现时,我可以遍历列表并查看该点是否在 child 内部。但我不喜欢这个主意。有没有更好的办法?
最佳答案
您确定要在布局上使用触摸监听器吗?为什么不让每个 View 都有一个触摸监听器?
假设您有一堆开关需要快速切换。开关控制着一个怪物。您可以让每个开关(您的 View )都有一个触摸监听器,将开关传递给怪物。现在怪物可以不同地处理每个 View 。
像这样:
brightnessSwitch.setOnTouchListener( new View.OnTouchListener() {
boolean onTouch(View v, MotionEvent event) {
monster.toggleBrightness();
return true;
});
您甚至可以将 MotionEvent 传递给怪物。 (或者,如果您想要单一类型的 TouchListeners,您可以将 View 和事件都传递给怪物,但您会丢失关于哪个开关是哪个的信息。)
关于android - 如何从 MotionEvent 获取底层 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092545/
我是一名优秀的程序员,十分优秀!