开发者社区> trinea-cn> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android自动滚动 轮播循环的ViewPager

简介:
+关注继续查看

主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用。顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题

项目已开源Android Auto Scroll ViewPager@Github,欢迎star和fork。

更多自动滚动轮播的开源项目可见:自动滚动 ViewPager

示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚

示例代码地址见AutoScrollViewPagerDemo,效果图如下:

android auto scroll viewpager

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 使用

(3)更多自动滚动轮播的开源项目可见:自动滚动 ViewPager

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
高效开发-Android Studio自动补全
目录 💥 判断是否为空 变量.null+Enter 💥 判断是否非空 变量.notnull+Enter 变量.nn+Enter(简单版) 💥 本身for循环 变量.for+Enter 💥 变量for循环 变量.fori+Enter 💥 变量倒序for循环 变量.forr+Enter 💥 加括号 变量.arg+Enter 💥 if判断 判断语句.if+Enter 💥 快速定义变量 变量.var+Enter
32 0
Android小技巧之无限循环的ViewPager
前言 之所以会写着篇文章的原因是我现在项目用运用到了广告轮播(BannerView),当时在赶项目的时候在github上面找到了符合的开 源库 就直接引用了,但是该开源库稍微有点庞大,功能比较繁多。
939 0
Android实现ViewPager无限循环滚动回绕
 Android实现ViewPager无限循环滚动回绕 Android系统提供的ViewPager标准方式是左右可以自由滑动,但是滑动到最左边的极限位置是第一个page,滑动到最右边的位置是最后一个page,当滑动到最左或者最右时候,就不能再滑动/滚动了,这是Android系统默认的ViewPager实现方式。
1379 0
+关注
trinea-cn
www.trinea.cn
78
文章
6
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载