您的位置:首页 > 其它

ViewPager圆点导航动态实现(利用seletor)

2016-08-05 16:50 489 查看
      尝试过重绘view等方法来实现ViewPager底部的圆点导航,上网学习后才发现有更简便的实现方法。      1.首先设置selector来设定圆点的两种状态,即当前页面被选中、当前页面未被选中:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:drawable="@drawable/dot_selected"></item>
<item android:state_enabled="false" android:drawable="@drawable/dot_unselected"></item>ß
</selector>
可见,设定了两种状态,当前View被选中,通过setEable(true),来使得圆点使用@drawable/dot_selected来代替;反之则使用@drawable/dot_unselected来代替。
两种状态的文件如下,通过shape标签来实现圆点:
//dot_seleted.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#ff7c7e8c" /><sizeandroid:width="10dp"android:height="10dp" /></shape>
//dot_unselected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#ff43465a" /><sizeandroid:width="10dp"android:height="10dp" /></shape>
2.接下来动态写入圆点:
private void initDots() {dots = new ArrayList<>();ImageView item;for (int i = 0; i < vpList.size(); i++) {//List<Integer> vpList;//用于存储每张图片的resIditem = new ImageView(this);item.setBackgroundResource(R.drawable.dot_selector);//此处将dot_selector设为背景LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(20, 20);//设置每一个圆点的宽高
layoutParams.setMargins(15, 0, 15, 0);//设置左右间隔。注意,由于此处圆点的父View是LinearLayout,故使用LinearLayout.LayoutParams
					     //而非ViewGroup.LayoutParamsitem.setLayoutParams(layoutParams);if (vpMain.getCurrentItem() == i)item.setEnabled(true);//当前图片被选中,置为trueelseitem.setEnabled(false);//当前图片未被选中,置为falsedots.add(item);//该圆点加入集合便于管理llDots.addView(item);//将该点加入LinearLayout中}}
3.最后重写onPageSelected方法,即可实现圆点导航:
@Overridepublic void onPageSelected(int position) {for (int i = 0; i < dots.size(); i++) {if (position == i)dots.get(i).setEnabled(true);elsedots.get(i).setEnabled(false);}}
ps:
踩过的坑,待填:
ViewPager中的onPageSelected()中使用setBackgroundColor()与setImageResource()无法成功画出底部圆点的变化,圆点不会正常的跟随图片移动,而setBackgroundColor()可正常运行(但setBackground不仅是改变了整个矩形背景的颜色,并非单纯地改变圆点颜色)。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ViewPager 圆点导航