Android自定义轮播图控件

来源:互联网 发布:sql server 分组 编辑:程序博客网 时间:2024/06/14 10:50

自定义布局:ad_cycle_view.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ad_rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/adv_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/viewGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:orientation="horizontal" >
    </LinearLayout>


    <TextView
        android:id="@+id/viewGroup2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:padding="15dp"
        android:layout_above="@+id/viewGroup"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="25dp"
        android:orientation="horizontal" >
    </TextView>

</RelativeLayout>


activity_main.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"
    tools:context="com.zoesap.view.slider.MainActivity" >

    <com.zoesap.view.slider.ImageCycleView
        android:id="@+id/ad_view"
        android:layout_width="match_parent"
        android:layout_height="180dp" />

</RelativeLayout>


<span style="font-size:24px;color:#ff0000;">广告图片自动轮播控件</span><pre name="code" class="java" style="background-color: rgb(255, 255, 255); ">ImageCycleView 


/** * 广告图片自动轮播控件 */public class ImageCycleView extends LinearLayout {/** * 上下文 */private Context mContext;/** * 图片轮播视图 */private ViewPager mAdvPager = null;/** * 滚动图片视图适配 */private ImageCycleAdapter mAdvAdapter;/** * 图片轮播指示器控件 */private ViewGroup mGroup;/** * 图片轮播指示个图 */private ImageView mImageView = null;/** * 滚动图片指示视图列表 */private ImageView[] mImageViews = null;/** * 图片滚动当前图片下标 */private boolean isStop;/** * 游标是圆形还是长条,要是设置为0是长条,要是1就是圆形 默认是圆形 */public int stype=1;/** * @param context */public ImageCycleView(Context context) {super(context);}/** * @param context * @param attrs */@SuppressLint("Recycle")public ImageCycleView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, this);mAdvPager = (ViewPager) findViewById(R.id.adv_pager);mAdvPager.setOnPageChangeListener(new GuidePageChangeListener());// 滚动图片右下指示器视mGroup = (ViewGroup) findViewById(R.id.viewGroup);}/** * 触摸停止计时器,抬起启动计时器 */@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {if(event.getAction()==MotionEvent.ACTION_UP){// 开始图片滚动startImageTimerTask();}else{// 停止图片滚动stopImageTimerTask();}return super.dispatchTouchEvent(event);}/** * 装填图片数据 *  * @param imageUrlList * @param imageCycleViewListener */public void setImageResources(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){this.stype=stype;// 清除mGroup.removeAllViews();// 图片广告数量final int imageCount = imageUrlList.size();mImageViews = new ImageView[imageCount];for (int i = 0; i < imageCount; i++) {mImageView = new ImageView(mContext);LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);params.leftMargin=10; mImageView.setScaleType(ScaleType.CENTER_CROP);mImageView.setLayoutParams(params);mImageViews[i] = mImageView;if (i == 0) {if(this.stype==1)mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);elsemImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);} else {if(this.stype==1)mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur);elsemImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur);}mGroup.addView(mImageViews[i]);}mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList ,imageCycleViewListener);mAdvPager.setAdapter(mAdvAdapter);mAdvPager.setCurrentItem(Integer.MAX_VALUE/2);startImageTimerTask();}/** * 图片轮播(手动控制自动轮播与否,便于资源控件) */public void startImageCycle() {startImageTimerTask();}/** * 暂停轮播—用于节省资源 */public void pushImageCycle() {stopImageTimerTask();}/** * 图片滚动任务 */private void startImageTimerTask() {stopImageTimerTask();// 图片滚动mHandler.postDelayed(mImageTimerTask, 5000);}/** * 停止图片滚动任务 */private void stopImageTimerTask() {isStop=true;mHandler.removeCallbacks(mImageTimerTask);}private Handler mHandler = new Handler();/** * 图片自动轮播Task */private Runnable mImageTimerTask = new Runnable() {@Overridepublic void run() {if (mImageViews != null) {mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1);if(!isStop){  //if  isStop=true   //当你退出后 要把这个给停下来 不然 这个一直存在 就一直在后台循环 mHandler.postDelayed(mImageTimerTask, 5000);}}}};/** * 轮播图片监听 *  * @author minking */private final class GuidePageChangeListener implements OnPageChangeListener {@Overridepublic void onPageScrollStateChanged(int state) {if (state == ViewPager.SCROLL_STATE_IDLE)startImageTimerTask(); }@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int index) {index=index%mImageViews.length;// 设置当前显示的图片// 设置图片滚动指示器背if(stype==1)mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus);elsemImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus);for (int i = 0; i < mImageViews.length; i++) {if (index != i) {if(stype==1)mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur);elsemImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur);}}}}private class ImageCycleAdapter extends PagerAdapter {/** * 图片视图缓存列表 */private ArrayList<ImageView> mImageViewCacheList;/** * 图片资源列表 */private ArrayList<Integer> mAdList = new ArrayList<Integer>();/** * 广告图片点击监听 */private ImageCycleViewListener mImageCycleViewListener;private Context mContext;public ImageCycleAdapter(Context context, ArrayList<Integer> adList , ImageCycleViewListener imageCycleViewListener) {this.mContext = context;this.mAdList = adList;mImageCycleViewListener = imageCycleViewListener;mImageViewCacheList = new ArrayList<ImageView>();}@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object obj) {return view == obj;}@Overridepublic Object instantiateItem(ViewGroup container, final int position) {Integer imageUrl = mAdList.get(position%mAdList.size());ImageView imageView = null;if (mImageViewCacheList.isEmpty()) {imageView = new ImageView(mContext);imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));//testimageView.setScaleType(ImageView.ScaleType.CENTER_CROP);// 设置图片点击监听imageView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mImageCycleViewListener.onImageClick(position%mAdList.size(), v);}});} else {imageView = mImageViewCacheList.remove(0);}imageView.setTag(imageUrl);container.addView(imageView);imageView.setBackgroundResource(imageUrl);//mImageCycleViewListener.displayImage(imageUrl, imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {ImageView view = (ImageView) object;mAdvPager.removeView(view);mImageViewCacheList.add(view);}}/** * 轮播控件的监听事件 *  * @author minking */public static interface ImageCycleViewListener {/** * 加载图片资源 *  * @param imageURL * @param imageView */public void displayImage(String imageURL, ImageView imageView);/** * 单击图片事件 *  * @param position * @param imageView */public void onImageClick(int position, View imageView);}}</span>


<span style="font-size:24px;color:#ff0000;">MainActivity 使用自定义轮播图</span>

public class MainActivity extends Activity {private ImageCycleView mAdView;private ArrayList<Integer> list = new ArrayList<Integer>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mAdView = (ImageCycleView) findViewById(R.id.ad_view);list.add(new Integer(R.drawable.tu5));list.add(new Integer(R.drawable.tu6));mAdView.setImageResources(list , mAdCycleViewListener, 1);}private ImageCycleViewListener mAdCycleViewListener = new ImageCycleViewListener() {//单击图片@Overridepublic void onImageClick(int position, View imageView) {Toast.makeText(getApplicationContext(), "点击图片"+position, 0).show();}//加载图片资源@Overridepublic void displayImage(String imageURL, ImageView imageView) {}};}


源码下载地址: http://download.csdn.net/detail/liumeng920/9318639


0 0
原创粉丝点击