先看下效果
小圆点的形状和颜色都是可以自己定义的,看需求
首先第一步,滑2个圆点,一个是选中后的圆点,一个是未选中的圆点,看选中的圆点shape
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@color/colorprimary"/> </shape>
未选中的
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@color/coloraccent"/> </shape>
是不是很简单,就指定一个圆形,一个颜色
接下来就是定义一个selector,用来控制选中和非选中
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/indicator_checked_shape" android:state_enabled="true"/> <item android:drawable="@drawable/indicator_unchecked_shape" android:state_enabled="false"/> </selector>
然后就是mainactivity的布局文件,放置一个viewpager,下面放置一个linearlayout,用来装小圆点
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.duanlian.viewpagerindicatordemo.mainactivity"> <android.support.v4.view.viewpager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="170dp" /> <linearlayout android:id="@+id/linear" android:layout_width="match_parent" android:layout_height="40dp" android:layout_below="@+id/viewpager" android:layout_margintop="-40dp" android:gravity="center" android:orientation="horizontal"></linearlayout> </relativelayout>
接下来就是mainactivity的代码,其实很简单,都有注释,就不细说了
package com.duanlian.viewpagerindicatordemo; import android.os.bundle; import android.support.v4.view.viewpager; import android.support.v7.app.appcompatactivity; import android.widget.imageview; import android.widget.linearlayout; import java.util.arraylist; import java.util.list; public class mainactivity extends appcompatactivity { private viewpager mviewpager; private linearlayout mlinear; private list<imageview> mlist; private pageradapter mpageradapter; private int[] imagearray = {r.mipmap.banner1, r.mipmap.banner2, r.mipmap.banner3, r.mipmap.ic_launcher}; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); initpoint(); } private void initview() { mviewpager = (viewpager) findviewbyid(r.id.viewpager); mlinear = (linearlayout) findviewbyid(r.id.linear); //给viewpager添加图片显示 mlist = new arraylist<>(); for (int i = 0; i < imagearray.length; i++) { imageview imageview = new imageview(this); imageview.setimageresource(imagearray[i]); mlist.add(imageview); } mpageradapter = new pageradapter(mlist); mviewpager.setadapter(mpageradapter); //viewpager切换的监听事件 mviewpager.addonpagechangelistener(new viewpager.onpagechangelistener() { @override public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) { position = position % mlist.size();// 需要对position的值进行重新赋值,否则会造成数组越界 // 更新小圆点的显示 for (int i = 0; i < mlist.size(); i++) { imageview iv = (imageview) mlinear.getchildat(i); // 当前滑到的是那一页就让第几个小圆点处于选中状态 if (position == i) { iv.setenabled(true); } else { iv.setenabled(false); } } } @override public void onpageselected(int position) { } @override public void onpagescrollstatechanged(int state) { } }); } /** * 初始化指示器 */ private void initpoint() { for (int i = 0; i < mlist.size(); i++) { // 往llcontainer添加一个小圆点 imageview iv = new imageview(this); //设置背景 iv.setimageresource(r.drawable.indicator_viewpager_selector); //设置原点大小 linearlayout.layoutparams params = new linearlayout.layoutparams(30, 30); //如果是切好的图片就直接自适应 // linearlayout.layoutparams params = new linearlayout.layoutparams(viewgroup.layoutparams.wrap_content, viewgroup.layoutparams.wrap_content); iv.setlayoutparams(params); // 默认第0个小圆点显示红色 if (i == 0) { iv.setenabled(true); } else { iv.setenabled(false); } //设置原点之间的间距 iv.setpadding(5, 5, 5, 5); //添加到linearlayout中 mlinear.addview(iv); } } }
最后附上viewpager的adapter
package com.duanlian.viewpagerindicatordemo; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import java.util.list; /** * viewpager的adapter */ public class pageradapter extends android.support.v4.view.pageradapter{ private list<imageview> list; public pageradapter(list<imageview> list) { this.list = list; } @override public int getcount() { return list.size(); } @override public boolean isviewfromobject(view view, object object) { return view==object; } @override public object instantiateitem(viewgroup container, int position) { container.addview(list.get(position));//添加页卡 return list.get(position); } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview(list.get(position));//删除页卡 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug ———————————————— 版权声明:本文为CSDN博主「
JobScheduler 实现 特定时间,特定条件(系统空闲,电池电量,磁盘空间 ……)下执行任务
温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 10 Service
网友评论