自定义ViewPager的Indector加入器

这是我的第一篇博客,主要是对自己喜欢的东西进行记录。 

想起一下刚写Android的时候每次写到ViewPager都想有个能直接加Indector的东西好爽啊,哈哈 虽然现在还是菜,但是这东西还是写出来了,虽然写法可能有点低级。。。但是

好歹功能能实现了 哈哈, 记录一下。


//设置指示器
public static void setIndicator(final List data, Context context, final LinearLayout parent, final ViewPager viewPager) {
    final boolean[] isAuto = {false};
    @SuppressLint("HandlerLeak") final Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            int curPage = viewPager.getCurrentItem();
            isAuto[0] =true;
            viewPager.setCurrentItem(curPage+1);
        }
    };
    for (int j = 0; j < data.size(); j++) {
        Button bt = new Button(context);
        bt.setBackgroundResource(R.drawable.radiobt_slct);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) context.getResources().getDimension(R.dimen.indector), (int) context.getResources().getDimension(R.dimen.indector));
        params.setMargins(10, 0, 0, 0);
        bt.setLayoutParams(params);
        parent.addView(bt);
        View childAt = parent.getChildAt(0);
        childAt.setBackgroundResource(R.drawable.radiobt_slct1);
    }
    handler.sendEmptyMessageDelayed(1,1500);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        @Override
        public void onPageSelected(int position) {
            for (int i = 0; i < parent.getChildCount(); i++) {
                View childAt = parent.getChildAt(i);
                childAt.setBackgroundResource(R.drawable.radiobt_slct);
            }
            parent.getChildAt(position%data.size()).setBackgroundResource(R.drawable.radiobt_slct1);
            if (isAuto[0]){
                handler.sendEmptyMessageDelayed(1,3500);
                isAuto[0]=false;
            }
        }
        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}
 用法:

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:background="#fff"
    android:layout_width="match_parent"
    android:layout_height="300dp" />
<LinearLayout
    android:id="@+id/indectorLo"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_alignBottom="@id/viewPager"
    android:layout_marginBottom="15dp"
    android:layout_width="match_parent"
    android:layout_height="10dp" />
xml里面大概就是这样写,需要一个LinearLayout来作为Indector的容器。

然后代码里

首先,因为我用的无限轮播是伪无限轮播,也就是让ViewPager的Adapter.getCount返回很大的值。所以ViewPager的Adapter
里面要这样
override fun getCount(): Int {
    return Int.MAX_VALUE
}

其次,这是方法调用。 第一个参数是ViewPager的适配器数据入参,第二个参数是上面xml中的LinearLayout控件,第三个参数
ViewPager
MyUtils.setIndicator(datas,context,rootView.indectorLo,rootView.viewPager)

OK,这样一行代码,写入,ViewPager就有Indector了,并且还能自动轮播,因为最近在学kotlin,所以代码是用ktolin写的,但是相信大家都看的懂,不足之处请指出。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值