gpt4 book ai didi

android - 如何从 MotionEvent 获取底层 View ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:27 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com