首页 > 系统 > Android > 正文

Android 使用ViewPager自动滚动循环轮播效果

2019-10-24 20:33:19
字体:
来源:转载
供稿:网友

本文主要给大家介绍viewpager自动播放,循环滚动的效果,对android viewpager滚动相关知识感兴趣的朋友可以参考下本篇文章

Android 利用ViewPager实现图片可以左右循环滑动效果,感兴趣的朋友可以直接点击查看内容详情。

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

先给大家展示下效果图,喜欢的朋友可以下载源码:

Android 使用ViewPager自动滚动循环轮播效果

1、实现

没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去完成一次滚动,在完成一次滚动后发送另外一个delay的滚动消息,如此循环实现。自动滚动部分核心代码如下:

Java

 

  1. public void startAutoScroll() { 
  2. isAutoScroll = true
  3. sendScrollMessage(interval); 
  4. private void sendScrollMessage(long delayTimeInMills) { 
  5. /** remove messages before, keeps one message is running at most **/ 
  6. handler.removeMessages(SCROLL_WHAT); 
  7. handler.sendEmptyMessageDelayed(SCROLL_WHAT, delayTimeInMills); 
  8. private class MyHandler extends Handler { 
  9. @Override 
  10. public void handleMessage(Message msg) { 
  11. super.handleMessage(msg); 
  12. switch (msg.what) { 
  13. case SCROLL_WHAT: 
  14. scrollOnce(); 
  15. sendScrollMessage(interval); 
  16. break

至于ViewPager嵌套引起子ViewPager无法触摸问题是通过在子ViewPager的onTouchEvent中添加

Java

 

 
  1. getParent().requestDisallowInterceptTouchEvent(true); 

禁止父控件对touch event做intercept解决的。

ViewPager滑动速度的设置是通过反射的方式重新设置ViewPager的Scroller,改变Scroller的startScroll的间隔时间完成的。调用setScrollDurationFactor(double)即可。

2、使用

(1) 引入公共库

引入Android Auto ScrollViewPager@Github作为你项目的library(如何拉取代码及添加公共库)。

(2) 调用

仅需简单两步:

a. 布局定义

Java

 

 
  1. <cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager 
  2. android:id="@+id/view_pager" 
  3. android:layout_width="match_parent" 
  4. 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 使用


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表