原理很简单,发送一个延迟消息就能够了,具体说明看代码:java
universal-imageloader 进行的图片加载;
android
MainActivity:
网络
package com.hong.autoshowpager; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ViewPager viewPager; private MyViewPager adapter; private ArrayList<String> showImages;//网络数据(图片的url) private DisplayImageOptions options;//加载图片的option设置(universal-imageloader框架) /** * 自动轮播效果; */ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: int currentItem = viewPager.getCurrentItem();//获取当前pager的position viewPager.setCurrentItem(currentItem + 1);//收到消息后,播放下一张 removeCallbacksAndMessages(null);//移除消息回调 sendEmptyMessageDelayed(1, 3000);//再次发送播放下一张的消息; break; } } }; private MyOnPageChangeListener myOnPageChangeListenr; int currentPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); options = new DisplayImageOptions.Builder()//option的设置 .showImageOnLoading(R.drawable.ic_launcher) .cacheOnDisk(true) .cacheInMemory(true) .build(); viewPager = (ViewPager) findViewById(R.id.viewpager); showImages = ContentUtils.getShowImages();//从数据类里面得到播放的图片数据 currentPosition = showImages.size() * 2000;//设置初始化时显示第 currentPosition 页;能够设置很大显示position值 adapter = new MyViewPager(); viewPager.setCurrentItem(currentPosition);//设置到 currentPosition 的页面 myOnPageChangeListenr = new MyOnPageChangeListener(); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(myOnPageChangeListenr);//给viewPager设置监听事件 handler.sendEmptyMessageDelayed(1, 3000);//发送延迟消息,每3秒播放下一张 } /** * 适配器 */ private class MyViewPager extends PagerAdapter { @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { View pager1 = View.inflate(getApplicationContext(), R.layout.item_pager, null); ImageView imageView = (ImageView) pager1.findViewById(R.id.item_imageview); //对Position进行取模,由于 getCount() 方法里面返回的数量是很大的;不然会 OutOfIndexException 错误 ImageLoader.getInstance().displayImage(showImages.get(position % showImages.size()), imageView, options); container.addView(pager1); return pager1; } @Override public int getCount() { return showImages.size() * 5000;//固然也能够写成:Integer.MAX_VALUE; 随你心情; } @Override public boolean isViewFromObject(View view, Object object) { return object == view; } } /** * 实现监听的类 * 在拖拽状态时不进行轮播 */ private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_DRAGGING) {//在 拖拽 的时候移除消息回调 handler.removeCallbacksAndMessages(null); } else if (state == ViewPager.SCROLL_STATE_SETTLING) {//在 松手复位 的时候从新发送消息 handler.sendEmptyMessageDelayed(1, 3000); } else if (state == ViewPager.SCROLL_STATE_IDLE) {//在 空闲 时候发送消息 handler.sendEmptyMessageDelayed(1, 3000); } } } }
ContentUtils:app
private static String[] showImages = { "http://wimg.spriteapp.cn/ugc/2016/04/01/56fdfa2133add_1.jpg", "http://wimg.spriteapp.cn/ugc/2015/12/20/5675e6ea806e0_a_1.jpg", "http://wimg.spriteapp.cn/ugc/2016/04/01/56fdfd7d9483f_a_1.jpg" }; public static ArrayList<String> getShowImages() { ArrayList<String> images = new ArrayList<>(); for (int i = 0; i < showImages.length; i++) { images.add(showImages[i]); } return images; }
不要忘了 添加权限。框架
demo地址: http://download.csdn.net/download/qq_33363534/9480283ide