hsz*_*hsz 5 android android-gesture android-event
我已经GestureDetector在我的Activity. 现在,我可以抓住所有事件从整个画面像onSingleTapConfirmed,onDoubleTap,onLongPress...
是否可以检测View到我的自定义布局中的哪个被按下了?
在 Android 中,您拥有平台源代码,因此我建议您查看核心 ViewGroup 的实现方式并从中学习。
让我们检查一下此处ViewGroup可用的来源。寻找函数。它几乎可以完成您想要做的事情。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)) {
Run Code Online (Sandbox Code Playgroud)
我只能建议你做类似的事情。
我想您不想进行这种手动迭代(或递归,因为您可能想进入视图中的视图),因为,让我们面对现实,它非常恶心。在这种情况下,也许您可以让常规机制发挥其魅力(让事件像平常一样流入子视图)。然后在您想要处理的特定视图上设置事件处理程序,并让您的处理程序被调用并以某种方式通知您哪个视图被点击。
另一个需要记住的有趣的事情是自定义布局可以使用ViewGroup.setStaticTransformationsEnabled(). 当我实现 3D 视图轮播时,我使用了这些转换。在这种情况下,我很确定你想做的事是不可能的。子视图并不真正知道它们在哪里,因为静态转换将它们绘制在屏幕上的其他位置。在这种情况下,您可以使用自定义布局正确地将事件分派到其子视图。
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |