自定义Banner轮播图

废话不多说
自定义Banner的控件视图的XML文件 custombannerlayout
<?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">

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

    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/custom_ll"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_alignBottom="@id/custom_vp"
        android:gravity="center"
        android:orientation="horizontal">

    </LinearLayout>
</RelativeLayout>

自定义View类

public class CustomBanner extends RelativeLayout {
    private static String TAG = "Banner-----------";
    //轮播图片集合 list
    private static List<ImageView> list;
	//小圆点list
    private static List<ImageView> points = new ArrayList<>();
    private static ViewPager custom_vp;
    private static LinearLayout custom_ll;
    private MyHandler myHandler = new MyHandler();

    public CustomBanner(Context context) {
        this(context,null);
    }

    public CustomBanner(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public CustomBanner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        View view = View.inflate(context, R.layout.custombannerlayout, this);
        /*获取控件*/
        custom_vp = view.findViewById(R.id.custom_vp);
        custom_ll = view.findViewById(R.id.custom_ll);

    }

    //设置adapter
    public void setAdapter(PagerAdapter pagerAdapter){
        custom_vp.setAdapter(pagerAdapter);
        //ViewPager状态改变事件
        custom_vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //当页面滑动的时候回调方法
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }
            //当松开的时候回调方法
            @Override
            public void onPageSelected(int position) {
                position = position%points.size();
                for (int i=0; i<points.size();i++){
                    if(position==i){
                        points.get(position).setSelected(true);
                    }else{
                        points.get(i).setSelected(false);
                    }
                }
            }
            //当状态改变时回调函数
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    //开启自动轮播
    public void autoPlay(){
        myHandler.sendEmptyMessageDelayed(0,2000);
    }

    //停止自动轮播
    public void stopPlay(){
        myHandler.removeCallbacksAndMessages(null);
    }

    //实现Handmer
    public class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int item = custom_vp.getCurrentItem();
            item++;
            custom_vp.setCurrentItem(item);
            autoPlay();
        }
    }

    //创建适配器
    public static class Custom_vpPagerAdapter extends PagerAdapter{
        private final Context context;

        public Custom_vpPagerAdapter(Context context,List<ImageView> list1) {
            this.context = context;
            list = list1;
            Log.d(TAG,"-------------"+list.size());
            for(int i=0;i<list.size();i++){
                ImageView point = new ImageView(context);
                point.setImageResource(R.drawable.custom_selector);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                params.setMargins(10,0,10,0);
                point.setLayoutParams(params);
                points.add(point);
                custom_ll.addView(point);
            }
            points.get(0).setSelected(true);
        }

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

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

        @Override
        public Object instantiateItem(final ViewGroup container, int position) {
            position = position%list.size();
            ImageView imageView = list.get(position);
            container.addView(imageView);
            return imageView;
        }

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

小圆点选择器 custom_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<!--小圆点选择器-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--选中状态为红色-->
    <item android:drawable="@drawable/point_selected" android:state_selected="true"></item>
    <!--未选中为灰色-->
    <item android:drawable="@drawable/point_normal" android:state_selected="false"></item>
</selector>
未选中状态下的小圆点  point_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#999999"></solid>
    <size android:height="1.5dp" android:width="8dp"></size>
</shape>

选中状态下的小圆点 point_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:thickness="1.2dp"
    android:useLevel="false">
    <solid android:color="#FFFFFF"></solid>
    <size android:height="6.5dp" android:width="6.5dp"></size>
</shape>

在调用页面写

public void showBannerToJson(final List<AdBean.DataBean> list) {
        images = new ArrayList<>();
        for (int i=0;i<list.size();i++){
            String icon = list.get(i).getIcon();
            final int finalI = i;
            ImageView imageView = new ImageView(getActivity());
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getActivity(), WebViewActivity.class);
                    intent.putExtra("url",list.get(finalI).getUrl());
                    getActivity().startActivity(intent);
                }
            });
            Glide.with(getActivity()).load(icon).into(imageView);
            images.add(imageView);
        }
        //实现适配器
        CustomBanner.Custom_vpPagerAdapter adapter = new CustomBanner.Custom_vpPagerAdapter(getActivity(),images);
        banner.setAdapter(adapter);
        //开启轮播
        banner.autoPlay();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值