Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

2019-12-10 19:02:37丽君
易采站长站为您分析Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)的相关资料,需要的朋友可以参考下  

 前言:经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环。本以为单纯的ViewPager就可以实现这些功能。但是蛋疼的事情来了,ViewPager并不支持循环翻页。所以要实现循环还得需要自己去动手。自己在网上也找了些例子,本博文的Demo是结合自己找到的一些相关例子的基础上去改造,也希望对读者有用。

Demo实现的效果图如下:

Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

Demo代码:

工程目录如下图:

Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

废话不多说,上代码。

1.主Activity代码如下:

package com.stevenhu.android.phone.ui; 
import java.util.ArrayList; 
import java.util.List; 
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; 
import com.nostra13.universalimageloader.core.DisplayImageOptions; 
import com.nostra13.universalimageloader.core.ImageLoader; 
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 
import com.nostra13.universalimageloader.core.assist.QueueProcessingType; 
import com.stevenhu.android.phone.bean.ADInfo; 
import com.stevenhu.android.phone.utils.ViewFactory; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.Toast; 
import cn.androiddevelop.cycleviewpager.lib.CycleViewPager; 
import cn.androiddevelop.cycleviewpager.lib.CycleViewPager.ImageCycleViewListener; 
/** 
* 描述:主页 
* 
* @author stevenhu 
* @version 2015年5月8日 上午10:47:37 
*/ 
public class MainActivity extends Activity { 
private List<ImageView> views = new ArrayList<ImageView>(); 
private List<ADInfo> infos = new ArrayList<ADInfo>(); 
private CycleViewPager cycleViewPager; 
private String[] imageUrls = {"http://www.easck.com/v55183/infoimg/2013-07/130720115322ky.jpg", 
"http://www.easck.com/20130626/8174275_085522448172_2.jpg", 
"http://www.easck.com/20111215/577405_080531548148_2.jpg", 
"http://www.easck.com/20110722/2912365_092519919000_2.jpg", 
"http://www.easck.com/58pic/12/64/27/55U58PICrdX.jpg"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.ui_main); 
configImageLoader(); 
initialize(); 
} 
@SuppressLint("NewApi") 
private void initialize() { 
cycleViewPager = (CycleViewPager) getFragmentManager() 
.findFragmentById(R.id.fragment_cycle_viewpager_content); 
for(int i = 0; i < imageUrls.length; i ++){ 
ADInfo info = new ADInfo(); 
info.setUrl(imageUrls[i]); 
info.setContent("图片-->" + i ); 
infos.add(info); 
} 
// 将最后一个ImageView添加进来 
views.add(ViewFactory.getImageView(this, infos.get(infos.size() - 1).getUrl())); 
for (int i = 0; i < infos.size(); i++) { 
views.add(ViewFactory.getImageView(this, infos.get(i).getUrl())); 
} 
// 将第一个ImageView添加进来 
views.add(ViewFactory.getImageView(this, infos.get(0).getUrl())); 
// 设置循环,在调用setData方法前调用 
cycleViewPager.setCycle(true); 
// 在加载数据前设置是否循环 
cycleViewPager.setData(views, infos, mAdCycleViewListener); 
//设置轮播 
cycleViewPager.setWheel(true); 
// 设置轮播时间,默认5000ms 
cycleViewPager.setTime(2000); 
//设置圆点指示图标组居中显示,默认靠右 
cycleViewPager.setIndicatorCenter(); 
} 
private ImageCycleViewListener mAdCycleViewListener = new ImageCycleViewListener() { 
@Override 
public void onImageClick(ADInfo info, int position, View imageView) { 
if (cycleViewPager.isCycle()) { 
position = position - 1; 
Toast.makeText(MainActivity.this, 
"position-->" + info.getContent(), Toast.LENGTH_SHORT) 
.show(); 
} 
} 
}; 
/** 
* 配置ImageLoder 
*/ 
private void configImageLoader() { 
// 初始化ImageLoader 
@SuppressWarnings("deprecation") 
DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.icon_stub) // 设置图片下载期间显示的图片 
.showImageForEmptyUri(R.drawable.icon_empty) // 设置图片Uri为空或是错误的时候显示的图片 
.showImageOnFail(R.drawable.icon_error) // 设置图片加载或解码过程中发生错误显示的图片 
.cacheInMemory(true) // 设置下载的图片是否缓存在内存中 
.cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中 
// .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 
.build(); // 创建配置过得DisplayImageOption对象 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).defaultDisplayImageOptions(options) 
.threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory() 
.discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).build(); 
ImageLoader.getInstance().init(config); 
} 
}