首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当在CoordinatorLayout中时,ViewPager不会垂直滚动

当ViewPager嵌套在CoordinatorLayout中时,它默认不会进行垂直滚动。CoordinatorLayout是一个灵活的布局容器,用于协调其子视图之间的交互行为。它通过使用各种Behavior来控制子视图的位置和行为。

要实现ViewPager的垂直滚动,可以使用自定义的Behavior来修改CoordinatorLayout的行为。以下是一种可能的实现方式:

  1. 创建一个自定义的Behavior类,继承自CoordinatorLayout.Behavior,并重写onStartNestedScroll()和onNestedPreScroll()方法。
  2. 在onStartNestedScroll()方法中,判断滚动方向是否为垂直方向,并返回true以指示CoordinatorLayout可以处理垂直滚动。
  3. 在onNestedPreScroll()方法中,获取垂直滚动的偏移量,并将该偏移量应用到ViewPager上,实现垂直滚动效果。

下面是一个示例代码:

代码语言:txt
复制
public class VerticalScrollBehavior extends CoordinatorLayout.Behavior<ViewPager> {

    @Override
    public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull ViewPager child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
        return (axes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;
    }

    @Override
    public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull ViewPager child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
        
        // 应用垂直滚动的偏移量到ViewPager上
        child.setTranslationY(child.getTranslationY() + dy);
    }
}

要将此Behavior应用于ViewPager,可以在ViewPager的布局文件中添加app:layout_behavior属性:

代码语言:txt
复制
<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior=".VerticalScrollBehavior" />

这样,当ViewPager嵌套在CoordinatorLayout中时,它就可以进行垂直滚动了。

推荐的腾讯云相关产品:无

请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行适当修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NestedScrolling机制之CoordinatorLayout.Behavior实战

* child 使用此Behavior的View * directTargetChild 是target或是target的parent * target 处理滑动事件的view * axes 垂直滚动...target消耗的滚动时候触发,这个是水平滚动的实时距离 * dyUnconsumed view处于滚动状态,但是并不是由target消耗的滚动时候触发,这个是竖直滚动的实时距离 * type 同上 *...不拦截 true则不会有惯性滑动,需要自己处理 */ public boolean onNestedFling(@NonNull CoordinatorLayout coordinatorLayout,...onStopNestedScroll():看名字就知道了,当停止滑动时调用的方法,主要是执行当滑到一般停止要怎么恢复还是隐藏商品列表的判断 onNestedFling(): 当手指快速一划所触发的方法...,在代码结合着Scroller,onNestedFling赋一个结束值给Scroller,Scroller会不断产生中间值直到结束为止。

88910

CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar-Android M新控件

从官方文档我们可以看到: CoordinatorLayout是一个增强型的FrameLayout。...标记了layout_scrollFlags滚动事件,那么当LinearLayout滚动便可触发ToolBar的layout_scrollFlags效果 即往上滑动隐藏ToolBar,下滑出现ToolBar...,而不会隐藏TabLayout,因为TabLayout没有标记scrollFlags事件,相反,如果TabLayout也标记了ScrollFlags事件,那么LinearLayout的下滑ToolBar...enterAlwaysCollapsed 当你的视图已经设置minHeight属性又使用此标志,你的视图只能已最小高度进入,只有当滚动视图到达顶部才扩大到完整高度 exitUntilCollapsed...,如果设置了ViewPager,那么ViewPagerAdapter的getPageTitle()方法返回的就是Tab上的标题 ViewPager设置代码: ViewPager mViewPager

2.1K30
  • 自定义 Behavior - 仿新浪微博发现页的实现

    从效果图,我们可以看到 在 open 状态下,我们向上滑动 ViewPager 里面的 RecyclerView 的 时候,RecyclerView 并不会向上移动(RecyclerView 的滑动事件交给...在上一篇博客 一步步带你读懂 CoordinatorLayout 源码 ,我们有提到在 CoordinatorLayout,我们可以通过 给子 View 自定义 Behavior 来处理事件。...所以,我们在 WeiboHeaderPagerBehavior 的 onStartNestedScroll 方法可以这样写,可以确保 只拦截垂直方向上的滚动事件,且当前状态是打开的并且还可以继续向上收缩的时候还会拦截...nestedScrollAxes=" + nestedScrollAxes); } boolean canScroll = canScroll(child, 0); //拦截垂直方向上的滚动事件且当前状态是打开的并且还可以继续向上收缩...nestedScrollAxes=" + nestedScrollAxes); } boolean canScroll = canScroll(child, 0); //拦截垂直方向上的滚动事件且当前状态是打开的并且还可以继续向上收缩

    87720

    通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout

    Scroll: 表示向下滚动,这个View会被滚出屏幕范围直到隐藏. enterAlways: 表示向上滚动,这个View会随着滚动手势出现,直到恢复原来的位置. enterAlwaysCollapsed...layout_behavior事件作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。...CollapsingToolbarLayout的子View可以设置这两个属性 1、ayout_collapseMode (折叠模式) - 有两个值: pin - 设置为这个模式,当CollapsingToolbarLayout...parallax - 设置为这个模式,在内容滚动,CollapsingToolbarLayout的View(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier...相互建立联系的方法如下: setupWithViewPager(ViewPager viewPager) 如果选项卡里带有图标或者仅仅只有图标就麻烦了,那个选项卡会变得什么都没有了。

    2.3K90

    CoordinatorLayout使用全解析

    AppBarLayout的子布局有5种滚动标识(上面代码CollapsingToolbarLayout配置的app:layout_scrollFlags属性): scroll:所有想滚动出屏幕的view...(如:ImageView、Toolbar)在响应layout_behavior事件作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。...CollapsingToolbarLayout可以通过app:contentScrim设置折叠工具栏布局的颜色,通过app:statusBarScrim设置折叠状态栏的颜色。...当CollapsingToolbarLayout的子布局设置了parallax模式,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值为:0~...exitUntilCollapsed: 同样顾名思义,这个flag定义何时退出,当你定义了一个minHeight,这个view将在滚动到达这个最小高度的时候消失。

    2.1K20

    学习使用Material Design控件(四)Android实现标题栏自动缩放、放大效果

    本文要实现内容移动,标题栏自动缩放/放大的效果,效果如下: ?...控件介绍 这次需要用到得新控件比较多,主要有以下几个: CoordinatorLayout 组织它的子views之间协作的一个Layout,它可以给子View切换提供动画效果。...AppBarLayout 可以让包含在其中的控件响应被标记了ScrollingViewBehavior的View的滚动事件 CollapsingToolbarLayout 可以控制包含在CollapsingToolbarLayout...其中的控件,在响应collapse是移除屏幕和固定在最上面 TabLayout 结合ViewPager,实现多个TAB的切换的功能 NestedScrollView 与ScrollView基本相同...,不过包含在NestedScrollView的控件移动才能AppBarLayout缩放 Layout布局 <?

    1.2K31

    自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页

    open 状态指 Tab+ViewPager 还没有滑动到顶部的时候,header 还 没有被完全移除屏幕的时候 close 状态指 Tab+ViewPager 滑动到顶部的时候,Header 被移除屏幕的时候...从效果图,我们可以看到 在 open 状态下,我们向上滑动 ViewPager 里面的 RecyclerView 的 时候,RecyclerView 并不会向上移动(RecyclerView 的滑动事件交给...默认的事件传递机制是这样的, 当TouchEvent发生,首先Activity将TouchEvent传递给最顶层的View,TouchEvent最先到达最顶层 view 的 dispatchTouchEvent...因此,当我们给子 View 设置点击事件的时候,由于默认的 parent 没有拦截事件,会走到子 View 的 onToucheEvent 事件,由于设置了点击事件,事件被消费了,所以不会回调父 View...onTouchEvent 的 ACTION_MOVE 事件。

    1.3K40

    细说 AppbarLayout,如何理解可折叠 Toolbar 的定制

    当 AppBarLayout 的内容要从 CoordinatorLayout 外面进入内部,我们用 enter 指代这种行为,对应的手势就是向下滑动。...当 AppBarLayout 的内容从 CoordinatorLayout 内部向外部方向移动,我们用 exit 指代这种行为,对应的手势是向上滑动。...exitUntilCollapsed 前面讲过 当 AppBarLayout 的内容从 CoordinatorLayout 内部向外部方向移动,我们用 exit 指代这种行为,对应的手势是向上滑动...大家可以参考下 ViewPager 是怎么滑动的,只不过 ViewPager 是水平方向上的,AppBarLayout 的内容是垂直方向上的行为。...也就是说 snap 代表一种吸附的行为,当一个滑动事件结束后,Toolbar 会向最接近它的边缘自行滚动。那什么是最近的概念呢?比如向上滑动,如果滑过了一半它就向上滚动,否则滚动回原来的地方。

    3K30

    Android仿微博个人详情页滚动到顶部的实例代码

    整个结构上分为两部分,AppBarLayout(里面包含TabLayout),ViewPager,根节点是CoordinatorLayout。...上下滑动会引起AppBarLayout的联动,悬浮在顶部,或者是跟着viewPager一起滑动以及视差效果之类的。...目前我们要实现的是,在进入当前页面,强制让AppBarLayout滑动到顶部,使toolbar悬浮固定不动。...那么该怎么做呢,一种思路是在onCreate()方法,发post任务,页面渲染结束后,执行post任务,post的任务是调用AppBarLayout的API方法,让AppBarLayout往上滑。...总结 以上所述是小编给大家介绍的Android仿微博个人详情页滚动到顶部的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    1.2K20

    嵌套滑动通用解决方案--NestedScrollingParent2

    京东首页 可见,在向上滑动页面,当tabLayout滑动到顶部,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着会 滑动ViewPager的内层RecyclerView...所以按照正常处理滑动冲突的思路处理--当tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...,所以商品流就不会滑动了。...但其实在真实应用,可能 头部 和 列表 的数据来自不同的接口,当列表的数据请求失败要展示缺省图,但头部还是会展示。这时头部和列表 分开实现 是比较好的选择。 这里给出解决方案: <?..., viewPager内的fragment 也有RecyclerView,处理外层、内层 RecyclerView的嵌套滑动问题,类似淘宝、京东首页。

    3.7K31

    Android开发笔记(一百三十五)应用栏布局AppBarLayout

    可是仅仅使用Toolbar的话,还是有些呆板,比如说Toolbar固定占据着页面顶端,既不能跟着主体页面移上去,也不会跟着主体页面拉下来。...对于大家关心的额外功能,则主要有以下几点: 1、支持响应主体页面的滑动行为,即在主体页面上移或者下拉,AppBarLayout能够捕捉到主体页面的滚动操作; 2、AppBarLayout捕捉到滚动操作之后...3、大家都知道ViewPager是左右滚动的翻页视图,用户通过手势把页面横向拉动一段距离后松开,系统会判断接下来是自动左滚还是自动右滚,总之最后用户看到的是一个完整的页面,而不是拉到一半的页面。...3、exitUntilCollapsed : 该标志保证页面上至少能看到最小化的工具栏,不会完全看不到工具栏。具体的滚动说明如下所示: 向上滚动:头部先往上收缩,一直滚到折叠的最小高度。...然后主体向下滚动,滚到位后头部继续向下展开。 5、snap : 在用户手指松开,系统自行判断,接下来是全部向上滚到顶,还是全部向下展开。

    2K40

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    dispatchTouchEvent和 onTouchEvent的框里有个【true—->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止。...(true); view.requestFocus(); 这段代码在初始化的时候就让该界面的顶部的某一个控件获得焦点,滚动条自然就显示到顶部了。...> 关于CoordinatorLayout的更多用法,可以参考我的这一篇博客使用CoordinatorLayout打造各种炫酷的效果 ---- 总结 当我们滑动方向不同的时候,采用外部解决法和内部解决法...题外话 在这篇博客的最后提高的实现轮播图+list列表的几种实现形式,刚开始是不想写的,后面因为ScrollView里面嵌套ViewPager和RecyclerView在fragmentRecyclerView...抢占焦点,在某些情况下用户体验不好,才写出来的,跟这篇博客要讲解的View滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015提出来的

    5.7K51

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    dispatchTouchEvent和 onTouchEvent的框里有个【true—->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止。...(true); view.requestFocus(); 这段代码在初始化的时候就让该界面的顶部的某一个控件获得焦点,滚动条自然就显示到顶部了。...> 关于CoordinatorLayout的更多用法,可以参考我的这一篇博客使用CoordinatorLayout打造各种炫酷的效果 ---- 总结 当我们滑动方向不同的时候,采用外部解决法和内部解决法...题外话 在这篇博客的最后提高的实现轮播图+list列表的几种实现形式,刚开始是不想写的,后面因为ScrollView里面嵌套ViewPager和RecyclerView在fragmentRecyclerView...抢占焦点,在某些情况下用户体验不好,才写出来的,跟这篇博客要讲解的View滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015提出来的

    67010

    终于来了:Android端个人中心页面滑动冲突优化方案

    image.png 背景 抖音首页右滑可进入“个人中心”页面,对于首页日活上亿的 APP 来说,这个页面的pv理论上应该不会太小。...出现问题,用户的手先触发左右滑动,这时候由于 RecyclerView 父布局 ViewPager 的一些临界判断没被触发,所以没拦截事件,事件还是到了 RecyclerView ,此时如果再次上下滑动...,由于1的判断单次滑动周期内只触发了一次,还被认为是左右滑动事件,所以 LinearLayout 布局本身没有滚动,但是 RecyclerView 正常响应滚动,导致的出现滑动偏差。...ViewPager 判断了是否是子 View 消费事件,这里我们不能照搬过来,我们要取反,即如果当前自定义的 LinearLayout 中有横向可滑动的 View,我们的 isHorizontalDrag...以上是个人对于抖音“个人中心”页面滑动冲突优化的拙见及优化方案,仅仅是自己做过简单测试,个人觉得更好的方案可以使用谷歌的嫡系 CoordinatorLayout 来处理这种嵌套滑动。

    1K20
    领券