无线轮播ViewPager封装类

package bw.com.yunifangstore.view;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

import bw.com.yunifangstore.R;
import bw.com.yunifangstore.interfaceclass.OnPageClickListener;
import bw.com.yunifangstore.utils.CommonUtils;
import bw.com.yunifangstore.utils.ImageLoaderUtils;

/**
 * 无线轮播封装类类
 */
public class RoolViewPager extends ViewPager {

    private DisplayImageOptions imageOptions;
    private ArrayList<String> imageUrlList;
    private ArrayList<ImageView> dotList;
    private int[] pic;
    private RoolViewPagerAdapter adapter;
    private static final int RoolZERO = 0;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            //获取当前的ViewPager页
            int currentItem = RoolViewPager.this.getCurrentItem();
            currentItem++;
            //设置当前
            RoolViewPager.this.setCurrentItem(currentItem);
            //发送消息
            this.sendEmptyMessageDelayed(RoolZERO, 2000);
        }
    };
    private OnPageClickListener onPageClickListener;

    public RoolViewPager(Context context) {
        super(context);
        init();
    }


    public RoolViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        imageOptions = ImageLoaderUtils.initOptions();
    }

    /**
     * 调用者也就是其他类的ViewPager传送的数据
     *
     * @param imageUrlList 显示图片的集合
     * @param dotList  联动小点的集合(ImageView)
     * @param pic      存放小点的数组
     * @param onPageClickListener 自己设置的回调监听获取索引值
     */
    public void initData(final ArrayList<String> imageUrlList, final ArrayList<ImageView> dotList, final int[] pic, OnPageClickListener onPageClickListener) {
        this.imageUrlList = imageUrlList;
        this.dotList = dotList;
        this.pic = pic;
        this.onPageClickListener = onPageClickListener;
        /**
         * 小点随之滑动
         * 页面滑动监听
         */
        this.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < dotList.size(); i++) {
                    if (position % imageUrlList.size() == i) {
                        dotList.get(i).setImageResource(pic[0]);
                    } else {
                        dotList.get(i).setImageResource(pic[1]);
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    /**
     * 设置适配器
     */
    public void setRoolAdapter() {
        if (adapter == null) {
            adapter = new RoolViewPagerAdapter();
        }
        this.setAdapter(adapter);
        //发送消息
        handler.sendEmptyMessageDelayed(RoolZERO, 2000);
    }

    /**
     * 内部适配器类
     */
    public class RoolViewPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, final int position) {
            //加载布局视图
            View view = CommonUtils.inflate(R.layout.roolviewpager_item);
            ImageView iv_roolviewpager = (ImageView) view.findViewById(R.id.iv_roolviewpager);
            //ImageLoader进行异步加载图片
            ImageLoader.getInstance().displayImage(imageUrlList.get(position % imageUrlList.size()), iv_roolviewpager, imageOptions);
            container.addView(view);
            //点击冲突事件
            view.setOnTouchListener(new OnTouchListener() {

                private long downTime;
                private float downY;
                private float downX;

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            downX = event.getX();
                            downY = event.getY();
                            //按下时间
                            downTime = System.currentTimeMillis();
                            handler.removeCallbacksAndMessages(null);
                            break;
                        case MotionEvent.ACTION_UP:
                            float upX = event.getX();
                            float upY = event.getY();
                            //抬起时间
                            long upTime = System.currentTimeMillis();
                            if (downX == upX && downY == upY && upTime - downTime < 1000) {
                                  //自定义监听(下方有)
                               if (onPageClickListener != null) {
                                    onPageClickListener.setOnPage(position % imageUrlList.size());
                                }
                            }
                            handler.sendEmptyMessageDelayed(RoolZERO, 2000);
                            break;
                    }
                    return true;
                }
            });
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

    }

    /**
     * 当不在当前屏幕时停止轮播
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        //停止发送消息
        handler.removeCallbacksAndMessages(null);
    }
}
  //加载布局视图
==============================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
        android:id="@+id/iv_roolviewpager"
        android:layout_width="580px"
        android:layout_height="350px"
        android:background="@drawable/sharp_activity_info"
        android:layout_centerInParent="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="5px"
        />
</RelativeLayout>
自定义监听事件 
========================================================================= 
public interface OnPageClickListener {
    void setOnPage(int position);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值