自定义滑动容器,支持双向滑动和悬停吸顶

PageScrollView是一个自定义容器,支持水平和垂直滑动,以及子视图悬停吸顶。它可以替代ViewPager和ScrollView,并提供更灵活的布局和事件监听。无需嵌套,支持不定宽高的子视图,适用于各种滑动场景,如视图切换和内容间距。项目源码可在GitHub找到。
摘要由CSDN通过智能技术生成

 程序员的丰碑

介绍

PageScrollView是一个继承于ViewGroup的自定义容器类,如其名它支持ScrollViewViewPager两种滑动效果。无需嵌套LinearLayout,可支持不定宽高的子View视图。支持水平和垂直方向的布局和手势,支持任意子View滑动吸顶或是吸底悬停的交互。支持ViewPager 固有的PageTransform动画和PageChangeListener ,ScrollChangeListener等还有 View滑动时可见索引变化VisibleRangeChangeListener接口。

更多优化自定义 ViewGroup: https://github.com/rexyren/WidgetLayout

以下给出两张 gif 示例,演示其最基本的功能: 本示例github源码地址

无需嵌套LinearLayout > scrollview.gif
ViewPager 模式 > viewpager.gif

产生的背景

项目一中需要使用ViewPager 翻页,但交互上每页有间距且要露出相邻页的部分,滑动时还要有透明度和缩放动画。首先想到用ViewPagersetPageMarginPagerAdaptergetPageWidth 返回小于 1,虽能达到效果,然无法使选中的 Item 居中在屏幕上,就果断放弃。简阅 ViewPager 源码后结合需求写了一个自定义的PageLayout 满足了需求,它就是PageScrollView 的前身。

项目二有个视图切换的 tab 要求随视图滑动到 TitleBar 下方吸顶,当时是用FrameLayout嵌套一个ScrollView和一个假的副本TabLayout 同步数据和交互,并处理滑动事件来完成的。需求完成后,就捉摸着重写一个 比ScrollView 功能更强大的滑动控件,要支持任意子视图滑动悬停。

想到刚写了个PageLayout 可改进下就能兼容ScrollView的滑动效果,读了ScrollView 源码后就开始动手写了。从此更名为PageScrollView ,真正实现了ViewPagerScrollView相应一样的交互和已知接口。改善后支持水平和垂直方向的布局和手势滑动,以及设定的任意View 悬停在边缘等 。

使用场景:

  • 完全可替代ScrollView &HorizontalScrollView 的使用场景 且少了一层LinearLayout 嵌套。
  • 方便监听滑动时子 View 可见性的变化,随时知道可见 View 的索引范围。
  • 当滑动视图内有某子View 需要随滑动吸顶或是吸底时。
  • 当滑动视图内部所有子View 都要隋滑动做Transform 动画时。
  • 当需要使用像ViewPager 或是Gallery 交互,特别适合内部子视图宽高不同或不足一屏时同时滑动选中要求居中。
  • 支持布局方向和滑动方向 动态随时切立即生效,且能恢复选中状态。
  • 可设置滑动容器的最大宽或高时,视图内容不足父容器大小时,可强制填充到父窗口大小。

如何使用

1. 在 xml 布局中使用,添加PageScrollView 标签设置可选的属性,像LinearLayout 去添加子视图的标签

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值