viewPager自定义轮播图,简单的实现。

自定义View

package com.example.administrator.monthlytest.customView;

import android.content.Context;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
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 android.widget.Toast;

import com.bumptech.glide.Glide;
import com.example.administrator.monthlytest.bean.HomeBean;

import java.util.List;

/**
 * created by 左 at 2018/06/01
 */
public class SowingViewPrage extends ViewPager {
    private List<HomeBean.DataBean> list;
    private Context context;
    private Handler handler = new Handler();
    private Runnable runnable;
    private int index = 100;

    public SowingViewPrage(@NonNull Context context) {
        this(context, null);
    }

    public SowingViewPrage(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }


    /**
     * 定义一个接收数据的方法
     */
    public void setAdapterData(List<HomeBean.DataBean> list) {
        this.list = list;
        //创建适配器,自己调用自己
        MyPagerAdapter pagerAdapters = new MyPagerAdapter();
        this.setAdapter(pagerAdapters);

        runnable = new Runnable() {
            @Override
            public void run() {
                SowingViewPrage.this.setCurrentItem(index);
                index++;
                handler.postDelayed(runnable, 3000);
            }
        };
        handler.post(runnable);

        this.addOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                index = position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


    }


    /**
     * 停止轮播
     */
    public void stopMotion() {
        handler.removeCallbacks(runnable);
    }

    /**
     * 再次开启轮播
     */
    public void startMotion() {
        handler.postDelayed(runnable, 3000);
    }

    /**
     * 内部类,展示轮播图
     */
    class MyPagerAdapter extends PagerAdapter {

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

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, final int position) {
            ImageView image = new ImageView(context);
            image.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //可以在这点击图片跳转

                    Toast.makeText(context, "." + position%list.size(), Toast.LENGTH_SHORT).show();
                }
            });

            //显示图片
            Glide.with(context).load(list.get(position % list.size()).getIcon()).into(image);
            container.addView(image);
            return image;
        }

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

    /**
     * 处理按下时不自动轮播,松开后自动轮播
     */
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // 手指按下移除消息
                stopMotion();
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            // 细节,触摸可能在控件外才抬起,此时只能监听到取消事件
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                startMotion();
                break;
        }

        return super.onTouchEvent(ev);
    }

    /**
     * 自定义点击事件
     */
    private interface OnImgClickListener{
        void onClick(int i);
    }


}

调用方法比较简单:

自定义控件.setAdapterData(list);

传入一个图片的集合就行,传入网址,需要在内部更改。

需要根据Activity的生命周期,调用停止播放,停止的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值