动态添加小圆点指示器:
1.形状:
未激活的状态:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<size android:width="10dp" android:height="10dp"/>
<solid android:color="#999999"/>
</shape>
激活的状态:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<size android:width="10dp" android:height="10dp"/>
<solid android:color="@color/colorAccent"/>
</shape>
合成一个文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_indicator_unselect" android:state_enabled="false" />
<item android:drawable="@drawable/shape_indicator_select" android:state_enabled="true" />
</selector>
通过设置是否激活View来控制指示器的颜色改变。
xml布局代码:
<android.support.v4.view.ViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="15dp"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/ll_indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:gravity="center"
android:orientation="horizontal" />
java代码:
public class ImportFileGuideActivity extends BaseActivity {
private ViewPager mViewPager;
private List<Integer> imageList = new ArrayList<>();
private LinearLayout ll_indicator;
private int mCurrentItem = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
initData();
initView();
}
private void initData() {
imageList.add(R.drawable.weixinyi);
imageList.add(R.drawable.weixiner);
imageList.add(R.drawable.weixinsan);
}
private void initView() {
mViewPager = (ViewPager) findViewById(R.id.mViewPager);
ll_indicator = (LinearLayout) findViewById(R.id.ll_indicator);
MyPagerAdapter adapter = new MyPagerAdapter();
mViewPager.setAdapter(adapter);
setIndicator();
}
/**
* 动态添加指示器
*/
private void setIndicator() {
View viewIndicator;
for (int i = 0; i < imageList.size(); i++) {
//创建imageview作为小圆点
viewIndicator = new View(ImportFileGuideActivity.this);
//设置默认背景
viewIndicator.setBackgroundResource(R.drawable.selector_indicator);
viewIndicator.setEnabled(false);
//设置指示器宽高
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(20, 20);
//除了第一个小圆点,其他小圆点都设置边距
if (i != 0) {
layoutParams.leftMargin = 20;
}
//设置布局参数
viewIndicator.setLayoutParams(layoutParams);
//添加指示器到布局
ll_indicator.addView(viewIndicator);
}
//默认选中第一个指示器
ll_indicator.getChildAt(0).setEnabled(true);
//监听滑动
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
ll_indicator.getChildAt(mCurrentItem).setEnabled(false);
ll_indicator.getChildAt(i).setEnabled(true);
mCurrentItem = i;
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
/**
* 适配器
*/
private class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return imageList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView iv = new ImageView(ImportFileGuideActivity.this);
iv.setImageResource(imageList.get(position));
container.addView(iv);
return iv;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
}