程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

VerticalViewPager 内的GridView 垂直滑动

发布于2022-05-19 07:39     阅读(924)     评论(0)     点赞(22)     收藏(0)


我有自定义的 VerticalViewPager,其中 GridView 有垂直滚动条,可以说它有 50 个项目......

现在,问题是我需要识别何时 Gridview 在顶部滚动并允许 viewpager 顶部滑动以及当 gridview 在底部滚动时允许滑动到底部...

这基本上是开箱即用的,但问题是只有当我在gridview上快速滑动时,它才允许我转到另一个视图......但是当我拖动其他一些元素时,例如在gridview上,那么它不需要快速触发垂直视图页面的事件......这里有人会知道吗?

现在我去编辑gridview的computeVerticalScrollRange()和overScrollBy()或设置overScrollMode,这些都没有帮助。

对不起,如果我不完全理解,我正在做的是我有一个名为 ScrollableGridView 的类,我在其中实现了如下所示的方法:

编辑 1:

@Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent){
        if(deltaY>0){
            System.out.println("Overscrolling to BOTTOM registered from ScrollableGridView");
        }else if(deltaY<0){
            System.out.println("Overscrolling to TOP registered from ScrollableGridView");
        }
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, 0, isTouchEvent);
    }

在那里我可以识别用户是在列表的末尾还是开头,我只是不知道如何对gridview说当用户在顶部时停止推到顶部,只是让它在verticalviewpager上,但允许用户向下在gridview中,当他在gridview结束时对面。

我使用喜欢super.setEnabled(false);super.requestDisallowInterceptTouchEvent(false);阻止向后退的可能性的方法,它会阻止 gridview,因此 VerticalViewpager 将开始工作,但随后在 gridview 中向后滚动被禁用,这行为不自然。


解决方案


你想做的基本上SwipeToRefreshLayout和谷歌做的一样。根据方法的分辨率true/false返回(对于您的代码,您将执行onInterceptTouchEventcanChildScrollUp()canChildScrollVertically()

这是 SwipeToRefreshLayout 的源代码:

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/widget/SwipeRefreshLayout.java

在第 613 行,您可以看到canChildScrollUp()API14+ 仅调用ViewCompat.canScrollVertically或 if 低于 14 检查的方法.getFirstVisiblePosition

触摸事件拦截也应该很简单。

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
   if(canChildScrollVertically()) return false;
   else return super.onInterceptTouchEvent(ev);
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/442842/830309c0ba651a10e055/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)