gpt4 book ai didi

android - TouchEvent 被父级拦截后派发给 Listview

转载 作者:太空狗 更新时间:2023-10-29 16:39:45 24 4
gpt4 key购买 nike

我的布局看起来像这样:

my layout

ViewPager 内部有许多 Fragment,每个 Fragment 都有一个 ListView。

现在我想这样做:

通过向下滚动,ListView 不得滚动。相反,必须转换 header ,使其看起来像 native ActionBar。

我通过在我的 Activity 的根布局中拦截 TouchEvent 来做到这一点。我已经覆盖了父布局的 onInterceptTouchEvent() 方法,并检查是否应拦截 TouchEvent,方法是检索当前可见的 ListView 并检查 firstVisibleItem 是否是第一个并且它是否完全可见。如果应该拦截 TouchEvent,则调用我自定义的 OnGesutreListener 的 onScroll() 方法。所以“动画”进度取决于滚动偏移量。

一切正常。 但现在这是我的问题:

转换准备就绪,用户仍在向下滚动。作为用户,我希望 ListView 向下滚动。但是 TouchEvent 没有被分派(dispatch)给 ListView,因为它仍然被父布局拦截。只有再次上下移动手指后,才会再次调用 onInterceptTouchEvent(此时父布局还没有拦截),列表才可以滚动。

我尝试了一些方法,但它们对我没有效果:

  • 我试图在我 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/

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