这是我的第一篇博客,主要是对自己喜欢的东西进行记录。
想起一下刚写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写的,但是相信大家都看的懂,不足之处请指出。