viewpager 的工具类,内置多种指示器,能够帮你快速完成,轮播图,app 引导页,viewpager 的 tab 指示器等等
ViewPagerHelper
项目地址:LillteZheng/ViewPagerHelper
简介:这是一个,viewpager 的工具类,内置多种指示器,能够帮你快速完成,轮播图,app 引导页,viewpager 的 tab 指示器等等
更多:作者 提 Bug
标签:
viewpager-
你是否有遇到这样的问题,每次开发一个新的项目,在 viewpager 这一块上,总是在做重复的东西,比如 app 引导页,轮播图, viewpager+fragment 的 tab 指示器等等,这些虽然简单,但却是每个 app 都要的,而且很耗时,有没有每次在写这个,都很无语的感觉呢?
基于上面这种情况,ViewPagerHelper 就诞生了。ViewPagerHelper 是一个能快速帮你的完成 app 引导页,轮播,和 viewpager 指示器的工具, 内面内置了常用属性,满足你日常对油腻的师姐的一切幻想,解放你的双手,释放你的灵魂。。。。。
详细内容可以参考这篇博客: http://blog.csdn.net/u011418943/article/details/78493002
这里用的是 jitpack 这个网站,所以:
allprojects {repositories {...maven { url 'https://jitpack.io' }}
}
然后在你的 module 中添加:
compile 'com.github.LillteZheng:ViewPagerHelper:v0.9'
版本迭代
- v0.9 --> 处理第一次轮播图 index 不对问题,优化代码
- v0.8 --> 退出时自动关轮播,isOutVisiableWindow()方法,用于有滚动时,判断是否停止轮播
- v0.5 --> 增加 banner_loop_max_count 变量,当数据大于这个数值时,才会填充多个数据和轮播
- v0.5 --> 增加 banner_loop_max_count 变量,当数据大于这个数值时,才会填充多个数据和轮播
- v0.4 --> 解决 app 引导页,快速滑动时,“立即体验”按钮会不显示问题,并修改自定义属性,防止干扰
- v0.3 --> 从 lib 中移除 glide 的依赖,防止干扰其他项目,去掉和优化一些代码,谢谢各位的提醒
- v0.2 --> 修复 TabIndicator 的宽度,不是 match_parent 时,通过 SetTabData 添加数据,却显示不全的问题
- v0.1 --> 发布稳定版
效果图
首先,大家最常用到的就是轮播图了,这里给大家提供了 4 中常用的 Indicator
1、轮播图
第一种
第二种
第三种
第四种
使用图片轮播,你需要以下几个步骤和需要注意的地方:
注意: 使用轮播图,如果设置动画自动启动,可以使用 stopAnim() 和 startAnim() 关闭和启动动画,如果退出,动画会自动退出,所以不用担心后台继续运行的问题;当视图可以滚动时,可以使用 isOutVisiableWindow() 方法,判断轮播图是否已经超过了可视界面,从而去停止它。
步骤一,配置布局,把 BannerViewPager 和 指示器弄上,这里我用放大的 Indicator
它的父布局是一个 RelativeLayout,如果要上面魅族的放大效果,需要在父布局加上 clipChildren="false" 属性,然后配置你想要的自定义属性即可。
<com.zhengsr.viewpagerlib.view.BannerViewPagerandroid:id="@+id/loop_viewpager"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"zsr:banner_isloop="true"zsr:banner_looptime="3000"zsr:banner_switchtime="600" /><com.zhengsr.viewpagerlib.indicator.ZoomIndicatorandroid:id="@+id/bottom_scale_layout"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_gravity="bottom|right"android:layout_marginRight="20dp"android:gravity="center"zsr:zoom_alpha_min="0.5"zsr:zoom_leftmargin="10dp"zsr:zoom_max="1.5"zsr:zoom_selector="@drawable/bottom_circle" />
其中 bottom_circle,只是一个白色的 shape 圆球,你也可以不自己写,默认就是白色的白球放大缩小。 demo 中的 layout 参看这里:https://raw.githubusercontent.com/LillteZheng/ViewPagerHelper/master/app/src/main/res/layout/activity_loop.xml
步骤二,填充轮播的数据,比如 url 或者 resId
配置数据,这里的 LoopBean,是我定义的类,用来显示图片和文字,(如果只有图片,可以用 String,也可以用 integer 类型)
List<LoopBean> loopBeens = new ArrayList<>();for (int i = 0; i < TEXT.length; i++) {LoopBean bean = new LoopBean();bean.url = RESURL[i];bean.text = TEXT[i];loopBeens.add(bean);}
步骤三,配置 PageBean,设置指示器和数据
配置 PageBean,PageBean 是必须要添加的,主要是为了 viewpager 的指示器的作用,注意记得写上泛型.这里为上面的 LoopBean
PageBean bean = new PageBean.Builder<LoopBean>().setDataObjects(loopBeens).setIndicator(zoomIndicator).builder();
设置 viewpager 的动画(可不设),这里提供了三种,分别是 MzTransformer,ZoomOutPageTransformer, 和 DepthPageTransformer,可以体验一下,这里可有可无,这里我设置了魅族的效果,这样加上弧形的图片更好看。
mBannerCountViewPager.setPageTransformer(false,new MzTransformer());
步骤四,监听数据
view 的接口提供出来,供大家自行配置,这样的好处在于,实用性更高,你可以添加 gif,或者视频,或者简单的图片,这里我用 glide 去加载图片的 url。 记得也在 PageHelperListener 加泛型,这样 getItemView 的数据就是你泛型的数据了
mBannerCountViewPager.setPageListener(bean, R.layout.loop_layout, new PageHelperListener<LoopBean>() {@Overridepublic void getItemView(View view, LoopBean data) {ImageView imageView = view.findViewById(R.id.loop_icon);imageView.setImageResource(data.res);TextView textView = view.findViewById(R.id.loop_text);textView.setText(data.text);//如若你要设置点击事件,也可以直接通过这个 view 来设置,或者图片的更新等等}});
其中,R.layout.loop_layout 为你的 banner item 布局,为什么要单独再添加一个 layout 呢? 一时方便自定义,二是如果指定在 viewpager 写布局,容易出现 parent 冲突的问题;
demo 中的 activity 代码参考下面的链接:https://raw.githubusercontent.com/LillteZheng/ViewPagerHelper/master/app/src/main/java/com/zhengsr/viewpagerhelper/activity/LoopActivity.java
如果你要使用弧形图片,可以用 ArcImageView 这个控件,可以这样配置:
<!--弧形图片,arc_height 为弧度的高度--><com.zhengsr.viewpagerlib.view.ArcImageViewandroid:id="@+id/arc_icon"android:layout_width="match_parent"android:layout_height="match_parent"app:arc_height="15dp"android:scaleType="centerCrop"/>
2、Tab 指示器
第一种
第二种,条形状的版本
第三种,文字颜色渐变的方式
这里的配置就更简单了,关键就是这个 TabIndicator 了,可以选择你想要的属性,上面三种效果都集中在 TabIndicator 了,详细可以下载 demo 查看。
xml 的配置
<com.zhengsr.viewpagerlib.indicator.TabIndicatorandroid:id="@+id/line_indicator"android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/black_ff"app:tab_color="@color/white"app:tab_width="25dp"app:tab_height="5dp"app:tab_text_default_color="@color/white_ff"app:tab_text_change_color="@color/white"app:tab_show="true"app:tab_text_type="normaltext"app:tab_textsize="16sp"app:visiabel_size="3"app:tap_type="tri"></com.zhengsr.viewpagerlib.indicator.TabIndicator><ViewPage..../>
你可以通过这些属性,自由配置三角形,条状,或者只使用文字颜色变化,自定义属性的名字跟它的功能一样。
代码这样配置:
/*** 把 TabIndicator 跟 viewpager 关联起来*/TabIndicator tabIndecator = (TabIndicator) findViewById(R.id.line_indicator);// 设置 viewpager 的切换速度,这样点击的时候比较自然tabIndecator.setViewPagerSwitchSpeed(viewPager,600);tabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() {@Overridepublic void onClick(int position) {//顶部点击的方法公布出来viewPager.setCurrentItem(position);}});
这样,一个比较好用的 viewpager 加指示器的方式就完成了。
app 首次启动引导页
如果你要使用 引导页,也是非常简单,只需要使用 GlideViewPager 即可。配置与上面基本一致,只需要三部,我们就可以实现引导图;小看效果
看一个完整的配置:
GlideViewPager viewPager = (GlideViewPager) findViewById(R.id.splase_viewpager);ZoomIndicator zoomIndicator = (ZoomIndicator) findViewById(R.id.splase_bottom_layout);Button button = (Button) findViewById(R.id.splase_start_btn);//先把本地的图片 id 装进 list 容器中List<Integer> images = new ArrayList<>();for (int i = 0; i < RES.length; i++) {images.add(RES[i]);}//配置 pagerbean,这里主要是为了 viewpager 的指示器的作用,然后把最后一页的 button 也添加进来,注意记得写上泛型PagerBean bean = new PagerBean.Builder<Integer>().setDataObjects(images).setIndicator(zoomIndicator).setOpenView(button).builder();// 把数据添加到 viewpager 中,并把 view 提供出来,这样除了方便调试,也不会出现一个 view,多个// parent 的问题,这里在轮播图比较明显viewPager.setPageListener(bean, R.layout.image_layout, new PagerHelperListener<Integer>() {@Overridepublic void getItemView(View view, Integer data) {//通过获取到这个 view,你可以随意定制你的内容ImageView imageView = view.findViewById(R.id.icon);imageView.setImageResource(data);}});
xml 的配置如下:
<com.zhengsr.viewpagerlib.view.GlideViewPagerandroid:id="@+id/splase_viewpager"android:layout_width="match_parent"android:layout_height="match_parent"/><Buttonandroid:id="@+id/splase_start_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginLeft="100dp"android:layout_marginRight="100dp"android:layout_marginBottom="50dp"android:background="@drawable/glide_bottom_btn_bg"android:textColor="@color/white"android:text="@string/start"android:textSize="18sp"android:visibility="gone"/><com.zhengsr.viewpagerlib.indicator.ZoomIndicatorandroid:id="@+id/splase_bottom_layout"android:layout_alignParentBottom="true"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"zsr:zoom_selector="@drawable/bottom_circle"zsr:zoom_leftmargin="10dp"zsr:zoom_max="1.5"zsr:zoom_alpha_min="0.4"zsr:zoom_dismiss_open="true"android:orientation="horizontal"/>
可以就可以了,其实就是 viewpager 跟 indicator 指示器的配合。
下面可以看一下自定义的属性,方便大家在用的时候调用:
一些自定义属性:
BannerViewPager
名称 | 类型 | 说明 |
---|---|---|
banner_isloop | boolean | 是否自动轮播 |
banner_looptime | integer | 轮播的时间 |
banner_switchtime | integer | viewpager 的切换速度 |
banner_loop_max_count | integer | 超过这个数字时,才会轮播效果 |
ZoomIndicator
名称 | 类型 | 说明 |
---|---|---|
zoom_selector | reference | selecotr,一般就一个圆点即可 |
zoom_leftmargin | dimension | 两个圆点之间的间距 |
zoom_max | float | 小圆点放大的倍数 |
zoom_alpha_min | float | 小圆点缩小的倍数 |
zoom_dismiss_open | boolean | 做引导页的最后一页,是否隐藏圆点 |
NormalIndicator
名称 | 类型 | 说明 |
---|---|---|
normal_selector | reference | selecotr,一般就一个圆点即可- |
normal_leftmargin | dimension | 两个圆点之间的间距 |
normal_dismiss_open | boolean | 做引导页的最后一页,是否隐藏圆点 |
TransIndicator
名称 | 类型 | 说明 |
---|---|---|
trans_width | dimension | 指示器宽度 |
trans_height | dimension | 指示器高度 |
trans_defaultcolor | color,reference | 指示器默认的颜色 |
trans_leftmargin | dimension | 两个圆点之间的间距 |
trans_movecolor | color,reference | 指示器移动的颜色 |
trans_dismiss_open | boolean | 做引导页的最后一页,是否隐藏圆点 |
trans_round_radius | dimension | 矩形圆角 |
trans_type | round,circle | 矩形圆角 |
TextIndicator
名称 | 类型 | 说明 |
---|---|---|
word_show_circle | boolean | 是否显示外援的圆圈 |
word_circle_color | reference,color | 圆圈的颜色 |
word_text_color | reference,color | 文字颜色 |
word_text_size | reference | 文字大小 |
弧形图片 ArcImageView
名称 | 类型 | 说明 |
---|---|---|
arc_height | dimension | 弧度的高度 |
顶部 viewpager 指示器 TabIndicator
名称 | 类型 | 说明 |
---|---|---|
visiabel_size | integer | 可视化个数,比如有一排,我们就只要显示 4 个 |
tab_color | color,reference | 指示器的颜色 |
tab_show | boolean | 是否显示指示器 |
tab_text_type | normaltext,colortext | 顶部文字的类型,nromaltext 为普通的 textview,corlortext 为文件渐变 |
tab_width | dimension | 指示器的宽度 |
tab_height | dimension | 指示器的高度 |
tab_textsize | dimension | 顶部文字的大小 |
tab_text_default_color | color,reference | 顶部文字默认的颜色 |
tab_text_change_color | color,reference | 移动时,顶部文字的颜色 |
tap_type | tri,rect | 指示器类型,有三角形或者圆条 |
渐变文字 TextIndicator
名称 | 类型 | 说明 |
---|---|---|
colortext_size | dimension | 文字大小 |
colortext_default_color | reference,color | 默认颜色 |
colortext_change_color | reference,color | 渐变颜色 |
如果你有想要的效果,而本项目中没有的,你可以在 issue 中提出来,作者看到了,会抽空去实现的, 如果有发现问题了或者需要提供哪些接口出来,也可以在 issue 中提出来。当然,喜欢请 start 或 fork 来一波。
代码是最好的老师,可以 download,改成自己喜欢的。
viewpager 的工具类,内置多种指示器,能够帮你快速完成,轮播图,app 引导页,viewpager 的 tab 指示器等等相关推荐
- 游戏专题类,web网页模板分享,前端期末作业,静态页面,带轮播图,登录页
index.html <html lang="zh" data-hairline="true" data-theme="light"& ...
- [小程序项目] 使用微信开发者工具 新闻小项目 轮播图 新闻列表页 点击跳转新闻详情页 登录 获取用户基本信息
文章目录 效果 Gitee 目录结构 app.json 首页 pages/news/news.wxml pages/news/news.wxss pages/news/news.js 配置网络请求 u ...
- Android弧形广告图,简单封装弧形广告轮播图(ViewPager+贝塞尔曲线)
前言 通过ViewPager和贝塞尔曲线实现了一个弧形广告轮播图. 效果图 弧形ViewPager 实现方法 想要实现这个效果,现在几行代码就可以了: Step 1. Add it in your r ...
- 初学者python笔记(封装、反射、类内置attr属性、包装与授权)
文章目录 封装 反射 动态导入模块 类内置attr属性 包装与授权 本篇文章仍然是面向对象的相关内容,主要分析了封装.反射.动态导入模块.类内置attr属性.包装与授权三大面向对象编程的后续处理方法 ...
- JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动
内置对象&内置构造函数 日期时间格式 // 创建一个当前时刻的日期时间对象 var date = new Date(); // 获取date对象中的年月日时分秒 var y = date.ge ...
- Android【轮播图工具类】
可以定义轮播图的圆点样式 核心代码 public class FlashView extends RelativeLayout {private static final int RMP = Layo ...
- 动漫轮播html,带17种内置过渡动画的jquery轮播图插件
bsc-slider是一款带17种内置过渡动画的jquery轮播图插件.该jquery轮播图插件可以制作最基本的轮播图效果,并内置17种过渡动画效果,还可以自定义动画的easing效果. 使用方法 在 ...
- 仿小红书根据图片高度自适应viewpager高度轮播图
源码地址:http://download.csdn.net/detail/qq_34262695/9805267 之前不了解小红书,直到有一天经理说看见一个他想要的效果,跟小红书一样,赶紧下载小红书来 ...
- 使用ViewPager实现轮播图自动播放
使用ViewPager实现轮播图自动播放 通过使用ViewPager实现图片的自动轮播,也可以通过将自动滑动关闭通过手动滑动进行图片的滑动,现在简单分析一下实现的步骤: 1.让图片滑动起来. 2.让图 ...
最新文章
- 国内IDC即将迎来快速增长时期
- 7.Mahout菩萨
- 将阿里云上的nodejs应用配置成SAP云平台上destination的目的地之后
- java年利润编程题_[编程入门]利润计算-题解(Java代码)
- 小汤学编程之JAVA基础day05——数组
- 学写Windows Service
- php面向对象之策略模式,php策略模式的学习--引自《深入php面向对象模式与实践》...
- python调用excel的宏_Python – 运行Excel宏
- JAVA文件传输程序
- W10计算机策略怎么打开,如何打开组策略,详细教您win10如何打开组策略
- Matlab fspecial滤波函数
- android 触摸接口,Android 多点触摸接口
- c语言对称矩形的判定,八年级数学下册 第19章 矩形、菱形与正方形 19.1.2 矩形的判定教案 (新版)华东师大版...
- android 获取收到短信验证码,Android自动获取短信验证码
- 征服游戏 Floyd算法
- 移动跨平台ReactNative动画组件Animated【14】
- python爬取自如房间信息(二)
- 计算机毕业设计springboot基于疫情背景下的新型点餐送餐系统bpe1s源码+系统+程序+lw文档+部署
- [游戏数据表]泰拉瑞亚Terraria 全物品属性表
- 输入身高体重测身材_Excel制作身高体重自测表
热门文章
- 初识OpenGL (-)VAO顶点数组对象
- 多个着色器与多个VAO,VBO绘制三角形
- 实习生JAVA知识总结目录
- php生成objectid,通过PHP获取ObjectId MongoDB
- nodejs+vue+elementui校友会校友录社交网站系统-vscode
- 梯度下降算法原理讲解——机器学习
- U教授装win7系统教程
- maven中使用mybatis-plus
- 计算机主机中的核心部件,台式机主机内部结构 台式机主机有哪些配件组成【详细介绍】...
- Hough变换(含MATLAB实现)