原理很簡單,發送一個延遲消息就能夠了,具體說明看代碼: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