我有一个看起来像这样的布局:
ViewPager内部有许多Fragment,每个Fragment都包含一个ListView。
现在我想这样做:
向下滚动时,ListView 不得滚动。相反,必须转换 header ,使其看起来像 native ActionBar。
我通过拦截 Activity 根布局中的 TouchEvent 来完成此操作。 我已经覆盖了父布局的 onInterceptTouchEvent() 方法,并通过检索当前可见的 ListView 来检查 TouchEvent 是否应该被拦截,并检查 firstVisibleItem 是否是第一个并且它完全可见。 如果应该拦截 TouchEvent,则会调用我的自定义 OnGesutreListener 的 onScroll() 方法。所以“动画”进度取决于滚动偏移。
一切都很好。 但现在这是我的问题:
转换已准备就绪,用户仍向下滚动。作为用户,我希望 ListView 向下滚动。但是 TouchEvent 不会被分派(dispatch)到 ListView,因为它仍然被父布局拦截。只有当手指再次上下移动后,onInterceptTouchEvent 才会再次被调用(此时父布局还没有拦截),列表才可以滚动。
我尝试了一些方法,但它们并不适合我:
- 我尝试在中手动调用我的listView的onTouchEvent 我 parent 布局的 onTouchEvent() 方法 - 注意到发生了
- 我尝试在 onScroll 方法中手动调用 listView 的 onTouchEvent, 这也没有成功。
也许你们中的一些人知道如何解决这个问题。
非常感谢并问候!
最佳答案
您可以尝试在父级 onTouchEvent 中获取手指移动的 x 位置,然后使用
listView.smoothScrollByOffset(int offset);
要滚动 ListView 吗?
编辑:根据反馈,它应该是:
smoothScrollBy((int) distanceY, 1);
关于android - 被父级拦截后将 TouchEvent 调度到 Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19973614/