Android自动滚动 轮播循环的ViewPager
主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用。顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题。
项目已开源Android Auto Scroll ViewPager@Github,欢迎star和fork。
示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚
示例代码地址见AutoScrollViewPagerDemo,效果图如下:
1、实现
没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去完成一次滚动,在完成一次滚动后发送另外一个delay的滚动消息,如此循环实现。自动滚动部分核心代码如下:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public void startAutoScroll() {
isAutoScroll = true;
sendScrollMessage(interval);
}
private void sendScrollMessage(long delayTimeInMills) {
/** remove messages before, keeps one message is running at most **/
handler.removeMessages(SCROLL_WHAT);
handler.sendEmptyMessageDelayed(SCROLL_WHAT, delayTimeInMills);
}
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SCROLL_WHAT:
scrollOnce();
sendScrollMessage(interval);
break;
}
}
}
|
至于ViewPager嵌套引起子ViewPager无法触摸问题是通过在子ViewPager的onTouchEvent中添加
Java
1
|
getParent().requestDisallowInterceptTouchEvent(true);
|
禁止父控件对touch event做intercept解决的。
ViewPager滑动速度的设置是通过反射的方式重新设置ViewPager的Scroller,改变Scroller的startScroll的间隔时间完成的。调用setScrollDurationFactor(double)即可。
2、使用
(1) 引入公共库
引入Android Auto Scroll ViewPager@Github作为你项目的library(如何拉取代码及添加公共库)。
(2) 调用
仅需简单两步:
a. 布局定义
Java
1
2
3
4
|
<cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
|
代替一般的ViewPager定义
b. 启动ViewPager自动滚动
startAutoScroll() 启动自动滚动
stopAutoScroll() 停止自动滚动
3、设置
setInterval(long) 设置自动滚动的间隔时间,单位为毫秒
setDirection(int) 设置自动滚动的方向,默认向右
setCycle(boolean) 是否自动循环轮播,默认为true
setScrollDurationFactor(double) 设置ViewPager滑动动画间隔时间的倍率,达到减慢动画或改变动画速度的效果
setStopScrollWhenTouch(boolean) 当手指碰到ViewPager时是否停止自动滚动,默认为true
setSlideBorderMode(int) 滑动到第一个或最后一个Item的处理方式,支持没有任何操作、轮播以及传递到父View三种模式
setBorderAnimation(boolean) 设置循环滚动时滑动到从边缘滚动到下一个是否需要动画,默认为true
4、其他
(1) 指示器,圆形或是方形指示器请配合ViewPagerIndicator使用
(2)无限循环,如果希望在最后一张继续播放第一张而不是退回到第一张,请参考AutoScrollViewPagerSingleDemo.java,注意这个特性不能和 ViewPagerIndicator 使用
最新文章
- CSS HTML元素布局及Display属性
- weui 图片弹框
- CodeIgniter_2 路由中定义伪静态 直接映射到相关的控制器
- mycat启动后,用Navicat Premium 连接报 ";2013";
- 安装PIL库时提示python未注册错误(自定义python安装路径)
- (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法
- ASP.NET自定义控件组件开发 第一章 待续
- zookeeper 应用场景概述
- 将nodejs代码部署到阿里云服务器
- Windows Developer Day - MSIX and Advanced Installer
- js中hash、hashchange事件
- intellij idea 相关设置
- 《转》return *this和 return this有什么区别?
- Spyer中添加一些常用包的方法
- Linux 系统的DNS配置文件
- 第一次spring冲刺第5天
- 使用PyMongo访问需要认证的MongoDB
- 索引+sql优化
- DotNetOpenAuth实践之Windows签名制作
- VC++ GetSafeHwnd()和GetSafeHandle()
热门文章
- bzoj2115【WC2011】XOR
- 利用ROS内建SLAM建立地图
- Python之时间:calender模块(日历)
- javaScript 笔记(5) --- jQuery(上)
- HDOJ Important Sisters
- [LeetCode] Maximum Depth of Binary Tree dfs,深度搜索
- Codeforces 920E Connected Components? 补图连通块个数
- 【Linux】可重入函数和线程安全的区别与联系【转】
- 反射$change属性问题
- javascript 表格隔行换色