全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android动态给ViewPager添加Indicator导航

先看下效果

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # ViewPager  # Indicator  # 导航  # Android使用ViewPager实现导航  # Android中TabLayout+ViewPager 简单实现app底部Tab导航栏  # Android自定义ViewPagerIndicator实现炫酷导航栏指示器(ViewPager+F  # Android 利用ViewPager+GridView实现首页导航栏布局分页效果  # Android 中 TabHost与ViewPager结合实现首页导航效果  # ViewPager顶部导航栏联动效果(标题栏条目多)  # Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果  # Android ViewPager制作新手导航页(动态加载)  # Android ViewPager导航小圆点实现无限循环效果  # 小圆点  # 圆点  # 的是  # 都是  # 几个  # 都有  # 就不  # 很简单  # 则会  # 先看  # 大家多多  # 自适应  # 其实很简单  # 滑到  # layout_width  # id  # activity_main  # match_parent  # duanlian  # viewpagerindicatordemo 


相关文章: 如何高效完成独享虚拟主机建站?  ,想在网上投简历,哪几个网站比较好?  金*站制作公司有哪些,金华教育集团官网?  网站app免费制作软件,能免费看各大网站视频的手机app?  教程网站设计制作软件,怎么创建自己的一个网站?  简历在线制作网站免费版,如何创建个人简历?  建站之星如何配置系统实现高效建站?  制作公司内部网站有哪些,内网如何建网站?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  建站上传速度慢?如何优化加速网站加载效率?  建站之星×万网:智能建站系统+自助建站平台一键生成  焦点电影公司作品,电影焦点结局是什么?  如何用搬瓦工VPS快速搭建个人网站?  jQuery 常见小例汇总  网站制作服务平台,有什么网站可以发布本地服务信息?  如何快速搭建个人网站并优化SEO?  建站之星后台管理系统如何操作?  如何在云虚拟主机上快速搭建个人网站?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星CMS五站合一模板配置与SEO优化指南  建站VPS选购需注意哪些关键参数?  如何用狗爹虚拟主机快速搭建网站?  南宁网站建设制作定制,南宁网站建设可以定制吗?  详解jQuery停止动画——stop()方法的使用  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  建站之星导航菜单设置与功能模块配置全攻略  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何快速搭建高效简练网站?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何用低价快速搭建高质量网站?  制作网站的基本流程,设计网站的软件是什么?  全景视频制作网站有哪些,全景图怎么做成网页?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  兔展官网 在线制作,怎样制作微信请帖?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何选择靠谱的建站公司加盟品牌?  网站制作员失业,怎样查看自己网站的注册者?  如何通过商城自助建站源码实现零基础高效建站?  图册素材网站设计制作软件,图册的导出方式有几种?  怀化网站制作公司,怀化新生儿上户网上办理流程?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  建站主机与虚拟主机有何区别?如何选择最优方案?  香港服务器如何优化才能显著提升网站加载速度?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何基于PHP生成高效IDC网络公司建站源码?  如何用PHP快速搭建高效网站?分步指南  网站制作需要会哪些技术,建立一个网站要花费多少? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。