非常简单的方法实现ViewPager自动循环轮播,见红色代码部分,其它的代码可以忽略不看。

简洁高效是我解决问题的首要出发点。

  1. package com.shuivy.happylendandreadbooks.fragment;
  2.  
  3. import android.app.Activity;
  4. import android.app.Fragment;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.support.v4.view.ViewPager;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.TextView;
  14.  
  15. import com.shuivy.happylendandreadbooks.R;
  16. import com.shuivy.happylendandreadbooks.adapter.MyViewPagerAdapter;
  17.  
  18. import java.util.ArrayList;
  19. import java.util.List;
  20.  
  21. /**
  22. * Created by stk on 2016/7/22 0022.
  23. */
  24. public class HomeFragment extends Fragment {
  25.  
  26. private View mRootView;
  27. private Activity mContext;
  28. private LayoutInflater mLayoutInflater;
  29. private int[] mImageIdArray;
  30. private static final int TIME = 1700;
  31. private List<View> mLayouts;
  32. private List<View> mDots;
  33. private ViewPager mViewPager;
  34. private int mCount = 3;
  35. private Handler mHandler = new Handler();
  36. private int itemPosition;
  37.  
  38. @Override
  39. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  40. mContext = getActivity();
  41. if (mRootView == null) {
  42. mRootView = inflater.inflate(R.layout.fragment_home, container, false);
  43. mLayoutInflater = inflater;
  44. initView();
  45. } else {
  46. ViewGroup parent = (ViewGroup) mRootView.getParent();
  47. if (parent != null) {
  48. parent.removeView(mRootView);
  49. }
  50. }
  51.  
  52. return mRootView;
  53. }
  54.  
  55. private void initView() {
  56. mImageIdArray = new int[]{
  57. R.mipmap.book_viewpager1,
  58. R.mipmap.book_viewpager2,
  59. R.mipmap.book_viewpager3,
  60. };
  61. TextView textView = (TextView) mRootView.findViewById(R.id.titleView);
  62. textView.setOnClickListener(new View.OnClickListener() {
  63. @Override
  64. public void onClick(View view) {
  65. mViewPager.setCurrentItem(1);
  66. }
  67. });
  68.  
  69. initIndex();
  70. }
  71.  
  72. private void initIndex() {
  73. viewPager();
  74. mHandler.postDelayed(runnableForViewPager, TIME);
  75. }
  76.  
  77. /**
  78. * 首页上方的viewpager图片展示
  79. */
  80. private void viewPager() {
  81. ViewGroup viewGroup = (ViewGroup) mRootView.findViewById(R.id.viewGroup);
  82. mViewPager = (ViewPager) mRootView.findViewById(R.id.viewPager);
  83. //mCount是订单数量,是从订单处得到的数据,我们默认设为3
  84.  
  85. mLayouts = new ArrayList<>();
  86. mDots = new ArrayList<>();
  87. for (int i = 0; i < mCount; i++) {
  88. //下面两句必须放在for里面
  89. View layoutView = mLayoutInflater.inflate(R.layout.viewpager_item, null);
  90. View dotView = mLayoutInflater.inflate(R.layout.dot, null);
  91.  
  92. ImageView imageView = (ImageView) layoutView.findViewById(R.id.viewpager_image);
  93. imageView.setImageResource(mImageIdArray[i]);
  94. if (i == 0) {
  95. dotView.setBackgroundResource(R.drawable.dot_select);
  96. } else {
  97. dotView.setBackgroundResource(R.drawable.dot_no_select);
  98. }
  99. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
  100. new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
  101. ViewGroup.LayoutParams.WRAP_CONTENT));
  102. layoutParams.setMargins(20, 0, 20, 0);
  103. viewGroup.addView(dotView, layoutParams);
  104.  
  105. mLayouts.add(layoutView);
  106. mDots.add(dotView);
  107.  
  108. }
  109.  
  110. mViewPager.setAdapter(new MyViewPagerAdapter(mLayouts));
  111. mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
  112. @Override
  113. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  114.  
  115. }
  116.  
  117. @Override
  118. public void onPageSelected(int position) {
  119. for (int i = 0; i < mCount; i++) {
  120. if (i == position) {
  121. mDots.get(i).setBackgroundResource(R.drawable.dot_select);
  122. } else {
  123. mDots.get(i).setBackgroundResource(R.drawable.dot_no_select);
  124. }
  125. }
  126. }
  127.  
  128. @Override
  129. public void onPageScrollStateChanged(int state) {
  130.  
  131. }
  132. });
  133. }
  134.  
  135. /**
  136. * ViewPager的定时器
  137. */
  138. Runnable runnableForViewPager = new Runnable() {
  139. @Override
  140. public void run() {
  141. try {
  142. itemPosition++;
  143. mHandler.postDelayed(this, TIME);
  144. mViewPager.setCurrentItem(itemPosition % mCount);
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. }
  148. }
  149. };
  150. }

非常简单的方法实现ViewPager自动循环轮播的更多相关文章

  1. JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图

    Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...

  2. Android RecyclerView 水平滚动+自动循环轮播

    主要处理的地方: 1.RecyclerView中Adapter的item个人可以无限轮询. 2.RecyclerView自动滑动 3.手指按下时滑动停止,手指抬起后继续自动滑动 public clas ...

  3. 用jquery或js实现三个div自动循环轮播

    //3个div的统一class = 'div' var index =0; //3秒轮播一次 var timer = setInterval(function(){     index = (inde ...

  4. Android自动滚动 轮播循环的ViewPager

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

  5. 解析SwiftUI布局细节(二)循环轮播+复杂布局

    前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...

  6. Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程

    在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的实现思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于 ...

  7. Android无限循环轮播广告位Banner

     Android无限循环轮播广告位Banner 现在一些app通常会在头部放一个广告位,底部放置一行小圆圈指示器,指示广告位当前的页码,轮播展示一些图片,这些图片来自于网络.这个广告位banner ...

  8. ios之无限 自动 图片轮播器的实现

    比较之前发布的手动无限图片轮播器进行了改进.实现了自动无限轮播的功能.比较适合团购标题分类下面的轮播器功能. 实现思路: * 开启一个定时器,把操作放入消息循环池.每隔一定时间,操作执行一次. * 注 ...

  9. ViewPager实现无限轮播踩坑记

    最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对 ...

随机推荐

  1. eclipse删除多余的工作空间

    window->preferences->startup and shutdown->workspaces如图:

  2. js实现弹窗居中

    在一些页面中,我们总会遇到一些弹窗不居中的时候,还要根据浏览器的大小来调整弹窗的弹出位置, 之前我也遇到这样的问题,现在我把我知道的呈现给大家 css样式 .windowBox{ width:500p ...

  3. Date ——日期型函数Date常用API

     获取当前时间戳: let now = new Date().getTime() 获取某个时间点(比如12点)的时间戳: let date = new Date('2019-01-12 12:00:0 ...

  4. 使用NGINX+Openresty和unixhot_waf开源防火墙实现WAF功能

    使用NGINX+Openresty实现WAF功能 一.了解WAF1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: ...

  5. curl, wget常用选项

    使用指定的http代理,配合md5sum 对于检查源站与cdn节点资源是否一致很有效 curl -o a.jpg -x http://pbcdn.xximg1.com/v6/global2015/im ...

  6. OCM_第四天课程:Section2 —》GC 的安装和配置

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  7. 教你构建好 SpringBoot + SSM 框架

    来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ...

  8. Django整合Keras报错:ValueError: Tensor Tensor("Placeholder:0", shape=(3, 3, 1, 32), dtype=float32) is not an element of this graph.解决方法

    本人在写Django RESful API时,碰到一个难题,老出现,整合Keras,报如下错误:很纠结,探索找资料近一个星期,皇天不负有心人,解决了 Internal Server Error: /p ...

  9. 在IDEA中实战Git

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程git仓库上获取项目源码 场景三:小 ...

  10. Redis、RabbitMQ、Memcached

    知识目录: Memcached Redis RabbitMQ Memcached 回到顶部 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中 ...