android – 获取GestureDetector触及的视图

android – 获取GestureDetector触及的视图,第1张

概述我在我的Activity中实现了GestureDetector.现在我可以从整个屏幕抓取所有事件,如onSingleTapConfirmed,onDoubleTap,onLongPress …… 是否可以检测到我的自定义布局中的哪个View被按下了? 在 Android中,您拥有平台源代码,因此我建议您查看核心ViewGroup的实现方式并从中学习. 让我们检查ViewGroup可用的源here. 我在我的Activity中实现了GestureDetector.现在我可以从整个屏幕抓取所有事件,如onSingleTapConfirmed,onDoubleTap,onLongPress ……

是否可以检测到我的自定义布局中的哪个VIEw被按下了?

解决方法 在 Android中,您拥有平台源代码,因此我建议您查看核心VIEwGroup的实现方式并从中学习.

让我们检查VIEwGroup可用的源here.查找函数dispatchtouchEvent().它几乎可以满足您的需求.

为了确定哪个视图实际被点击,它会遍历所有子视图,请求每个视图的hitrect并检查它是否相关.码:

for (int i = count - 1; i >= 0; i--) {   final VIEw child = children[i];   if ((child.mVIEwFlags & VISIBIliTY_MASK) == VISIBLE        || child.getAnimation() != null) {       child.getHitRect(frame);       if (frame.contains(scrolledXInt,scrolledYInt)) {

我只能建议你做类似的事情.

我想你不会想要进行这种手动迭代(或递归,因为你可能想进入视图中的视图),因为,让我们面对它,这是非常恶心的.在这种情况下,也许您可​​以让常规机制发挥其魅力(让事件像往常一样流入子视图).然后在要处理的特定视图上设置事件处理程序,并调用您的处理程序并以某种方式通知您哪个视图被点击.

要记住的另一个有趣的事情是自定义布局可以使用VIEwGroup.setStatictransformationsEnabled()为其子视图实现静态转换.当我实现了3D视图轮播时,我使用了这些转换.在这种情况下,我很确定你想做什么是不可能的.子视图并不真正知道它们的位置,因为静态转换将它们绘制在屏幕上的其他位置.在这种情况下,您处于自定义布局的优雅之下,可以为您正确地将事件分派到其子视图.

总结

以上是内存溢出为你收集整理的android – 获取GestureDetector触及的视图全部内容,希望文章能够帮你解决android – 获取GestureDetector触及的视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存