您的位置:首页 > 移动开发 > Android开发

Android 广告轮播图

2016-05-13 10:22 543 查看
package com.view;

import android.content.Context;
import android.media.Image;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.sgcc.cs.BaseActivity;
import com.sgcc.cs.R;

import java.util.List;

/**
* Created by huangyan on 16/5/12.
*/
public class CarouselAdLayout extends LinearLayout {
private Context mContext;
/*轮播 viewpager*/
private ViewPager adViewPager;
/*轮播图片知识*/
private LinearLayout llPoints;
/*图片地址*/
private List<String> imageSource;
//    private
/*广告监听*/
private CarouseAdListener adListener;
/*存放图片Imageview*/
private ImageView[] imageViews;
/*存放图片指示view*/
private ImageView[] pointViews;
/*默认指示图片*/
private int selectImageResource = R.drawable.ads_selected;
private int unselectImageResorce = R.drawable.ads_unselected;

/*是否在播放*/
private boolean isPlay=false;

public CarouselAdLayout(Context context) {
super(context);
}

public CarouselAdLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
LayoutInflater.from(context).inflate(R.layout.tab_carouse_ad_layout, this);
adViewPager = (ViewPager) findViewById(R.id.ad_banner);
adViewPager.setOnPageChangeListener(new CommunicationPageChangeListener());
llPoints = (LinearLayout) findViewById(R.id.ll_point);

}

/**
* 设置指示图片
*
* @param selectImageResource  当前图片指示
* @param unselectImageResorce 其他图片指示
*/
private void setPointImageResource(int selectImageResource, int unselectImageResorce) {
this.selectImageResource = selectImageResource;
this.unselectImageResorce = unselectImageResorce;

}

/**
* 设置轮播图片
*
* @param imageSource
* @param listener
*/
public void setImageSource(List<String> imageSource, CarouseAdListener listener) {
this.imageSource = imageSource;
this.adListener = listener;
if (imageSource == null || imageSource.size() == 0)//未传入图片地址
return;
imageViews = new ImageView[imageSource.size()];
pointViews = new ImageView[imageSource.size()];
llPoints.removeAllViews();
ImageView adIv;
for (int i = 0; i < imageSource.size(); i++) {
adIv = new ImageView(mContext);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(5, 0, 5, 0);
adIv.setLayoutParams(params);
//            adIv.setScaleType(ImageView.ScaleType.CENTER_CROP);
pointViews[i] = adIv;
if (i == 0)
adIv.setImageResource(selectImageResource);
else
adIv.setImageResource(unselectImageResorce);
llPoints.addView(adIv);
}
MyPagerAdapter adapter = new MyPagerAdapter();
adViewPager.setAdapter(adapter);
startCarouseTask();//开始轮播
}

/*handler*/
private Handler handler = new Handler();

/*当前循环项*/
private int currentImageIndex = 0;

/*轮播Task*/
private Runnable carouseAdTask = new Runnable() {
@Override
public void run() {
//            if (++currentImageIndex >= imageSource.size())//最后一张
//                currentImageIndex = 0;
adViewPager.setCurrentItem(adViewPager.getCurrentItem() + 1);
if(isPlay)
handler.postDelayed(carouseAdTask, 3000);

}
};

/*开始轮播*/
private void startCarouseTask() {

stopCarouseTask();
isPlay=true;
handler.postDelayed(carouseAdTask, 3000);

}

/*停止轮播*/

private void stopCarouseTask() {
isPlay=false;
handler.removeCallbacks(carouseAdTask);
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_UP)
startCarouseTask();
else
stopCarouseTask();
return super.dispatchTouchEvent(ev);
}

/**
* Viewpager 适配器
*/
private class MyPagerAdapter extends PagerAdapter {
private ImageView cacheIv;//被销毁的View 避免重复创建

@Override
public int getCount() {//数量
//            return imageSource.size();
return Integer.MAX_VALUE;//避免最后一张拖动回到第一张
}

@Override
public boolean isViewFromObject(View view, Object object) {//是否由对象生成界面
//            Log.e("msg"," isViewFromObject    "+(view == object));
return view == object;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {//销毁
ImageView iv = (ImageView) object;
adViewPager.removeView(iv);
cacheIv = iv;//和上面是否可以合成一步
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {//return 一个对象
ImageView adImageview = null;
if (cacheIv == null) {//创建View
adImageview = new ImageView(mContext);
adImageview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
adImageview.setAdjustViewBounds(true);
adImageview.setMaxWidth(((BaseActivity) mContext).getSWidth());
adImageview.setMaxHeight(((BaseActivity) mContext).getSHeight());
adImageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
adImageview = cacheIv;
cacheIv=null;//防止倒滑时复用报错,设置为空
}

adImageview.setOnClickListener(new OnClickListener() {//设置监听
@Override
public void onClick(View view) {
if (adListener != null)
adListener.onAdCilck(position % imageSource.size(), imageSource.get(position % imageSource.size()), (ImageView) view);
}
});
adListener.displayImage(adImageview, imageSource.get(position % imageSource.size()));//设置显示图片
container.addView(adImageview);//添加
return adImageview;
}
}

private class CommunicationPageChangeListener implements ViewPager.OnPageChangeListener {

@Override
public void onPageScrollStateChanged(int arg0) {
//            Log.e("msg","状态改变:"+arg0);
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageSelected(int arg0) {
//           Log.e("msg","  onPageSelected" +arg0);
for (int i = 0; i < pointViews.length; i++) {
if (i == arg0 % imageSource.size())
pointViews[i].setImageResource(selectImageResource);
else
pointViews[i].setImageResource(unselectImageResorce);
}
}

}

/*轮播图监听*/
public static interface CarouseAdListener {
public void onAdCilck(int index, String imgUrl, ImageView view);

public void displayImage(ImageView iv, String imgUrl);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: