简单的图片轮播实现

图片轮播的帮助类
public class BannerHelper {
    private static int TIMES=3000;
    private static boolean flag=false;
    private ViewPager viewPager;

    public void setUp(ViewPager viewPager){
        this.viewPager = viewPager;
        start();
        run();
    }

    private void run(){
        if(viewPager==null){
            return;
        }
        ThreadUtil.runOnBackThread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    if(flag){
                        handler.sendEmptyMessageDelayed(1,TIMES);
                        flag=false;
                    }
                }
            }
        });
    }

    /**
     * 开始轮播
     */
    public void start(){
        //清空消息队列中消息
        if (handler.hasMessages(1)){
            handler.removeMessages(1);
        }
        flag=true;
    }

    /**
     * 停止轮播
     */
    public void stop(){
        //清空消息队列中消息
        if (handler.hasMessages(1)){
            handler.removeMessages(1);
        }
        flag=false;
    }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
            flag=true;
        }
    };
}
viewpager的适配器
public class BannerPageAdapter  extends PagerAdapter{
    private final List<ImageView> imageViews;

    public BannerPageAdapter(List<ImageView> imageViews) {
        this.imageViews = imageViews;
    }

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

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

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //对ViewPager页号求模取出View列表中要显示的项
        position %= imageViews.size();
        if (position<0){
            position = imageViews.size()+position;
        }
        ImageView view = imageViews.get(position);
        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
        ViewParent vp =view.getParent();
        if (vp!=null){
            ViewGroup parent = (ViewGroup)vp;
            parent.removeView(view);
        }
        container.addView(view);
        //add listeners here if necessary
        return view;
    }


在activity中给viewpager设置监听
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                bannerHelper.start();
                position %= images.length;
                for (int i = 0; i < points.size(); i++) {
                    if (i == position) {
                        points.get(i).setBackgroundResource(R.color.appBlue);
                    } else {
                        points.get(i).setBackgroundResource(R.color.appWrite);
                    }
                }
                LogUtil.v(TAG, "position:" + position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                if (state == ViewPager.SCROLL_STATE_DRAGGING) {
                    //第1个执行, state = 1
                    bannerHelper.stop();
                } else if (state == ViewPager.SCROLL_STATE_SETTLING) {
                    //第3个执行,手放开后, state = 2
                } else if (state == ViewPager.SCROLL_STATE_IDLE) {
                    bannerHelper.start();
                    //第6个执行,结束, state = 0
                }
            }
        });

        mainToolBar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawerLayout.openDrawer(Gravity.START);
            }
        });



给viewpager设置数据 并且加上指示器


  private void initBanner() {
        List datas = new ArrayList();
        for (int i = 0; i < images.length; i++) {
            ImageView e = new ImageView(this);
            Glide.with(this).load(images[i]).centerCrop().into(e);
            datas.add(e);
            TextView textView = new TextView(this);
            textView.setBackgroundResource(R.color.appWrite);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 8, 1);
            params.setMargins(10, 0, 10, 0);
            textView.setLayoutParams(params);
            linearPoint.addView(textView);
            points.add(textView);
        }
        bannerHelper = new BannerHelper();
        viewPager.setAdapter(new BannerPageAdapter(datas));
        viewPager.setCurrentItem(Integer.MAX_VALUE / 2 + (datas.size() - datas.size() % 2) / 2 - 1);
        points.get(0).setBackgroundResource(R.color.appBlue);
        bannerHelper.setUp(viewPager);
    }

布局
<RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="400px">
            <android.support.v4.view.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            <LinearLayout
                android:id="@+id/linear_point"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="20px"
                android:layout_alignParentBottom="true"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            </LinearLayout>
        </RelativeLayout>




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值