自定义ViewPager轮播

List<String> list = new ArrayList<>();
        list.add("https://www.zhaoapi.cn/images/quarter/ad1.png");
        list.add("https://www.zhaoapi.cn/images/quarter/ad2.png");
        list.add("https://www.zhaoapi.cn/images/quarter/ad3.png");
        list.add("https://www.zhaoapi.cn/images/quarter/ad4.png");
        myview.setUrl(list);
        myview.init(li);

public class My extends ViewPager {
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0) {
                int currentItem = getCurrentItem();
                currentItem++;
                setCurrentItem(currentItem);
                handler.sendEmptyMessageDelayed(0, 2000);
            }
        }
    };

    private List<String> imgUrl;
    private ArrayList<RadioButton> rb;

    public My(@NonNull Context context) {
        super(context);
    }

    public My(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public void setUrl(List<String> imgUrl) {
        this.imgUrl = imgUrl;
    }

    public void init(LinearLayout linearLayout) {
        rb = new ArrayList<>();
        for (int i = 0; i < imgUrl.size(); i++) {
            RadioButton radioButton = new RadioButton(getContext());
            rb.add(radioButton);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    50,
                    50);

            params.rightMargin = 30;//设置指示器之间的距离
            linearLayout.setGravity(Gravity.CENTER);
            linearLayout.addView(radioButton, params);
            this.setOnPageChangeListener(new OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    //修改上一个的状态
                    int currentItem = getCurrentItem();
                    rb.get(currentItem % imgUrl.size()).setChecked(false);
                    //更新新的未位置
                    Log.e("gg", "........" + currentItem);
                    currentItem++;
                    Log.e("gg2", "........" + currentItem);
                    //修改当前位置指示器的状态
                    rb.get(currentItem % imgUrl.size()).setChecked(true);
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }

        this.setAdapter(new Myadapter(imgUrl, getContext()));
        setCurrentItem(200);
        handler.sendEmptyMessageDelayed(0, 2000);
    }





package com.example.week3_lianxi.myview;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import com.example.week3_lianxi.R;
import com.example.week3_lianxi.adapter.Myadapter;


import java.util.ArrayList;
import java.util.List;

/**
 * aiuthor Ender 鲍晨华
 * email [email protected]
 * created 2018/7/7 8:37
 */
public class MyViewpage extends ViewPager {
    private List<String> imgUrl;
    private int currentPage = 200;
    private ArrayList<RadioButton> radioViews;

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0){
                int currentItem = getCurrentItem();
                currentItem++;
                setCurrentItem(currentItem);
                handler.sendEmptyMessageDelayed(0,1000);
            }
        }
    };

    public MyViewpage(@NonNull Context context) {
        super(context);
    }

    public MyViewpage(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public void setImgUrl(List<String> imgUrl) {
        this.imgUrl = imgUrl;
    }


    public void init(LinearLayout linearLayout) {
//        LinearLayout linearLayout = new LinearLayout(context);
//        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,50);

//        this.addView(linearLayout,param);
        radioViews = new ArrayList<>();
        for (int i = 0; i < imgUrl.size(); i++) {
            RadioButton radioButton = new RadioButton(getContext());
//            radioButton.setButtonDrawable(null);
//            radioButton.setBackgroundResource(R.drawable.xuna);
            radioViews.add(radioButton);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    50,
                    50);
            params.rightMargin = 15;//设置指示器之间的距离

            linearLayout.setGravity(Gravity.CENTER);


            linearLayout.addView(radioButton, params);

        }
        radioViews.get(200 % imgUrl.size()).setChecked(true);//默认第一个选中

        this.setAdapter(new Myadapter(imgUrl, getContext()));
        setCurrentItem(200);

        this.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                //修改上一个的状态
                radioViews.get(currentPage % imgUrl.size()).setChecked(false);
                //更新新的未位置
                Log.e("gg", "........" + currentPage);
                currentPage = position;
                Log.e("gg2", "........" + currentPage);
                //修改当前位置指示器的状态
                radioViews.get(currentPage % imgUrl.size()).setChecked(true);
            }
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        handler.sendEmptyMessageDelayed(0,1000);
    }


}

猜你喜欢

转载自blog.csdn.net/W2597645565/article/details/81159104