1. 程式人生 > >Android實現Banner介面廣告圖片迴圈輪播

Android實現Banner介面廣告圖片迴圈輪播

轉自:http://blog.csdn.net/stevenhu_223/article/details/45577781


前言:經常會看到有一些app的banner介面可以實現迴圈播放多個廣告圖片和手動滑動迴圈。本以為單純的ViewPager就可以實現這些功能。但是蛋疼的事情來了,ViewPager並不支援迴圈翻頁。所以要實現迴圈還得需要自己去動手。自己在網上也找了些例子,本博文的Demo是結合自己找到的一些相關例子的基礎上去改造,也希望對讀者有用。

  Demo實現的效果圖如下:

  

   

   Demo程式碼:

     工程目錄如下圖:

  

      廢話不多說,上程式碼。

    1.主Activity程式碼如下

[java]  view plain  copy   在CODE上檢視程式碼片 派生到我的程式碼片
  1. package com.stevenhu.android.phone.ui;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;  
  7. import com.nostra13.universalimageloader.core.DisplayImageOptions;  
  8. import com.nostra13.universalimageloader.core.ImageLoader;  
  9. import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;  
  10. import com.nostra13.universalimageloader.core.assist.QueueProcessingType;  
  11. import com.stevenhu.android.phone.bean.ADInfo;  
  12. import com.stevenhu.android.phone.utils.ViewFactory;  
  13.   
  14. import android.annotation.SuppressLint;  
  15. import android.app.Activity;  
  16. import android.os.Bundle;  
  17. import android.view.View;  
  18. import android.widget.ImageView;  
  19. import android.widget.Toast;  
  20. import cn.androiddevelop.cycleviewpager.lib.CycleViewPager;  
  21. import cn.androiddevelop.cycleviewpager.lib.CycleViewPager.ImageCycleViewListener;  
  22. /** 
  23.  * 描述:主頁 
  24.  * 
  25.  * @author stevenhu 
  26.  * @version 2015年5月8日 上午10:47:37 
  27.  */  
  28. public class MainActivity extends Activity {  
  29.   
  30.     private List<ImageView> views = new ArrayList<ImageView>();  
  31.     private List<ADInfo> infos = new ArrayList<ADInfo>();  
  32.     private CycleViewPager cycleViewPager;  
  33.       
  34.     private String[] imageUrls = {"http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg",  
  35.             "http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg",  
  36.             "http://pic18.nipic.com/20111215/577405_080531548148_2.jpg",  
  37.             "http://pic15.nipic.com/20110722/2912365_092519919000_2.jpg",  
  38.             "http://pic.58pic.com/58pic/12/64/27/55U58PICrdX.jpg"};  
  39.       
  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.ui_main);  
  44.         configImageLoader();  
  45.         initialize();  
  46.     }  
  47.       
  48.     @SuppressLint("NewApi")  
  49.     private void initialize() {  
  50.           
  51.         cycleViewPager = (CycleViewPager) getFragmentManager()  
  52.                 .findFragmentById(R.id.fragment_cycle_viewpager_content);  
  53.           
  54.         for(int i = 0; i < imageUrls.length; i ++){  
  55.             ADInfo info = new ADInfo();  
  56.             info.setUrl(imageUrls[i]);  
  57.             info.setContent("圖片-->" + i );  
  58.             infos.add(info);  
  59.         }  
  60.           
  61.         // 將最後一個ImageView新增進來  
  62.         views.add(ViewFactory.getImageView(this, infos.get(infos.size() - 1).getUrl()));  
  63.         for (int i = 0; i < infos.size(); i++) {  
  64.             views.add(ViewFactory.getImageView(this, infos.get(i).getUrl()));  
  65.         }  
  66.         // 將第一個ImageView新增進來  
  67.         views.add(ViewFactory.getImageView(this, infos.get(0).getUrl()));  
  68.           
  69.         // 設定迴圈,在呼叫setData方法前呼叫  
  70.         cycleViewPager.setCycle(true);  
  71.   
  72.         // 在載入資料前設定是否迴圈  
  73.         cycleViewPager.setData(views, infos, mAdCycleViewListener);  
  74.         //設定輪播  
  75.         cycleViewPager.setWheel(true);  
  76.   
  77.         // 設定輪播時間,預設5000ms  
  78.         cycleViewPager.setTime(2000);  
  79.         //設定圓點指示圖示組居中顯示,預設靠右  
  80.         cycleViewPager.setIndicatorCenter();  
  81.     }  
  82.       
  83.     private ImageCycleViewListener mAdCycleViewListener = new ImageCycleViewListener() {  
  84.   
  85.         @Override  
  86.         public void onImageClick(ADInfo info, int position, View imageView) {  
  87.             if (cycleViewPager.isCycle()) {  
  88.                 position = position - 1;  
  89.                 Toast.makeText(MainActivity.this,  
  90.                         "position-->" + info.getContent(), Toast.LENGTH_SHORT)  
  91.                         .show();  
  92.             }  
  93.               
  94.         }  
  95.   
  96.     };  
  97.       
  98.     /** 
  99.      * 配置ImageLoder 
  100.      */  
  101.     private void configImageLoader() {  
  102.         // 初始化ImageLoader  
  103.         @SuppressWarnings("deprecation")  
  104.         DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.icon_stub) // 設定圖片下載期間顯示的圖片  
  105.                 .showImageForEmptyUri(R.drawable.icon_empty) // 設定圖片Uri為空或是錯誤的時候顯示的圖片  
  106.                 .showImageOnFail(R.drawable.icon_error) // 設定圖片載入或解碼過程中發生錯誤顯示的圖片  
  107.                 .cacheInMemory(true// 設定下載的圖片是否快取在記憶體中  
  108.                 .cacheOnDisc(true// 設定下載的圖片是否快取在SD卡中  
  109.                 // .displayer(new RoundedBitmapDisplayer(20)) // 設定成圓角圖片  
  110.                 .build(); // 建立配置過得DisplayImageOption物件  
  111.   
  112.         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).defaultDisplayImageOptions(options)  
  113.                 .threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()  
  114.                 .discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOr