ADBanner
public class ADBanner
{
private List<ImageView> mList;
private ViewPager mPager;
private Context mContext;
/**
* 总的页数
*/
private int pageCount;
/**
* 当前显示的是第几页
*/
private int curIndex = 0;
private DisplayImageOptions options = null;
private LinearLayout mLlDot;
private ScrollTask scrollTask;
// 定时任务
private ScheduledExecutorService scheduledExecutorService;
private int oldPosition = 0;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
mPager.setCurrentItem(curIndex);
};
};
private BannerAdapter bannerAdapter;
public ADBanner(ViewPager mPager, Context mContext, LinearLayout mLlDot)
{
this.mPager = mPager;
this.mContext = mContext;
options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.health_teach_loading).showImageForEmptyUri(R.drawable.health_teach_error).showImageOnFail(R.drawable.health_teach_error).build();
this.mLlDot = mLlDot;
}
/*
public void setupADBanner()
{
scrollTask = new ScrollTask();
pageCount = bannerBeanList.size();
mList = new ArrayList<>();
for (BannerBean bannerBean : bannerBeanList)
{
// 设置广告图
ImageView imageView = new ImageView(mContext);
imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(bannerBean.getImageUrl(), imageView, options);
mList.add(imageView);
}
bannerAdapter = new BannerAdapter(mList);
//设置适配器
mPager.setAdapter(bannerAdapter);
//设置圆点
setOvalLayout();
startAd();
}*/
/**
* 创建或更新广告数据
*/
public void createOrUpdateADDatas(List<BannerBean> newBannerBeanList){
//stopThread();
if(mList==null){
mList = new ArrayList<>();
}else{
mList.clear();
}
pageCount = newBannerBeanList.size();
for (BannerBean bannerBean : newBannerBeanList)
{
// 设置广告图
ImageView imageView = new ImageView(mContext);
imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(bannerBean.getImageUrl(), imageView, options);
mList.add(imageView);
}
if(bannerAdapter==null){
bannerAdapter = new BannerAdapter(mList);
//设置适配器
mPager.setAdapter(bannerAdapter);
}else{
bannerAdapter.notifyDataSetChanged();
handler.obtainMessage().sendToTarget();
}
curIndex=0;
oldPosition=0;
//设置圆点
setOvalLayout();
// startAd();
if(scrollTask==null){
scrollTask = new ScrollTask();
startAd();
}
}
/**
* 设置圆点
*/
public void setOvalLayout()
{
mLlDot.removeAllViews();
for (int i = 0; i < pageCount; i++)
{
View view = LayoutInflater.from(mContext).inflate(R.layout.dot, null);
mLlDot.addView(view);
view.setPadding(8, 8, 8, 8);
}
// 默认显示第一页
((ImageView) mLlDot.getChildAt(0).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangreen);
mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
public void onPageSelected(int position)
{
curIndex = position;
// 取消圆点选中
((ImageView) mLlDot.getChildAt(oldPosition).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangary);
// 圆点选中
((ImageView) mLlDot.getChildAt(position).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangreen);
oldPosition = position;
}
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
public void onPageScrollStateChanged(int arg0)
{
}
});
}
private class BannerAdapter extends PagerAdapter
{
//数据源
private List<ImageView> mList;
public BannerAdapter(List<ImageView> list)
{
this.mList = list;
}
@Override
public int getCount()
{
return mList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, final int position)
{
ImageView iv = mList.get(position % mList.size());
container.addView(iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showToast("点击:"+position);
}
});
return iv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView(mList.get(position % mList.size()));
}
}
public void stopThread(){
scheduledExecutorService.shutdown();
}
private void startAd() {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(scrollTask, 1, 5,
TimeUnit.SECONDS);
}
private class ScrollTask implements Runnable {
@Override
public void run() {
synchronized (mPager) {
curIndex = (curIndex + 1) % mList.size();
handler.obtainMessage().sendToTarget();
}
}
}
}
布局xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/ad_viewpager"
android:layout_width="match_parent"
android:layout_height="150dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/ad_viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dp" >
<LinearLayout
android:id="@+id/ad_points"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
</RelativeLayout>
使用:
if(adBanner==null){
//设置测试数据
BannerBean bannerBean=new BannerBean();
bannerBean.setImageUrl("http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg");
BannerBean bannerBean2=new BannerBean();
bannerBean2.setImageUrl("http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg");
BannerBean bannerBean3=new BannerBean();
bannerBean3.setImageUrl("http://pic18.nipic.com/20111215/577405_080531548148_2.jpg");
List<BannerBean> bannerBeenList=new ArrayList<>();
bannerBeenList.add(bannerBean);
bannerBeenList.add(bannerBean2);
bannerBeenList.add(bannerBean3);
adBanner=new ADBanner(adViewpager,getActivity(),bannerBeenList,adPoints);
adBanner.setupADBanner();
}else{
//设置测试数据
BannerBean bannerBean=new BannerBean();
bannerBean.setImageUrl("http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg");
BannerBean bannerBean2=new BannerBean();
bannerBean2.setImageUrl("http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg");
List<BannerBean> bannerBeenList=new ArrayList<>();
bannerBeenList.add(bannerBean);
bannerBeenList.add(bannerBean2);
adBanner.updateADDatas(bannerBeenList);
}
@Override
public void onDestroy()
{
super.onDestroy();
adBanner.stopThread();
}
参考资料:
自定义广告轮播Banner