动态给ViewPager添加Indicator导航

来源:互联网 发布:淘宝火拼 编辑:程序博客网 时间:2024/06/06 18:31

先看下效果这里写图片描述

小圆点的形状和颜色都是可以自己定义的,看需求

首先第一步,滑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));//删除页卡    }}

下载地址都在我上传的资源里面点击查看下载的资源

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 瑜伽开髋动作受伤怎么办 才学瑜伽教培上课紧张怎么办 瑜伽馆不给退费怎么办 脚运动后酸痛该怎么办 婴儿误吞拉链头怎么办 肠功能蠕动慢便秘怎么办 胃肠型和蠕动波怎么办 胃不蠕动了怎么办偏方 喂母乳母亲奶头裂开怎么办 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办 小孩吃奶奶头裂开了怎么办 站久坐久腰酸痛怎么办 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办