在ViewPager下面加圆点指示(使用selector方式)

news/2024/7/5 4:42:18

    前面讲了如何使用ViewPager来做多个可滑动的页面。今天在页面的下面加上一排小圆点,用于指示当前在第几页。效果如下(请忽略颜色和图案):

一、产生一个小圆点的视图

1、在drawable下产生一个选中和不选中颜色不同的小圆点形状(shape):dot.xml。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true">
        <shape android:shape="oval">
            <solid android:color="@color/purple_200" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item android:state_selected="false">
        <shape android:shape="oval">
            <solid android:color="@color/white" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</selector>

2、产生合适大小的小圆点视图ImageView:dot_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp">

    <ImageView
        android:id="@+id/v_dot"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:src="@drawable/dot"/>

</LinearLayout>

二、修改主视图,在ViewPager下面加入一个线性视图

    为了能在背景图上显示小圆点,我们用一个RelativeLayout来将ViewPager和一个LinearLayout放在一起,LinearLayout放在中央+下方。

    这个LinearLayout就是我们准备用于放置一排小圆点的容器。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#FFFFFF"
        android:orientation="vertical">

        <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:id="@+id/dots_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:orientation="horizontal" />
    </RelativeLayout>


</LinearLayout>

三、动态选中小圆点(选中变色)

1、定义一个变量记录滑动前是第几页

2、动态生成一排小圆点,并选中第一个

3、设置PageChange事件监听器,当滑动页面时选中新的小圆点

public class MainActivity extends AppCompatActivity {

    // 记录滑动前是第几页
    private int currentIndex = 0;
    // 定义引导页图片数组
    private int[] imageArray = {R.drawable.yingdao1, R.drawable.yingdao2,
            R.drawable.yingdao3, R.drawable.yingdao4};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewPager viewPager = findViewById(R.id.viewpager);
        MyPagerAdapter adapter = new MyPagerAdapter(this, imageArray);
        viewPager.setAdapter(adapter);

        // 动态生成小圆点
        LinearLayout linearLayoutDots = findViewById(R.id.dots_container);
        for (int i = 0; i < imageArray.length; i++) {
            linearLayoutDots.addView(LayoutInflater.from(this).inflate(R.layout.dot_view, null));
        }
        // 选中第一页
        linearLayoutDots.getChildAt(0).setSelected(true);
        // 添加PageChange监听器
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                linearLayoutDots.getChildAt(currentIndex).setSelected(false);
                linearLayoutDots.getChildAt(position).setSelected(true);
                currentIndex = position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}


http://lihuaxi.xjx100.cn/news/1894517.html

相关文章

LVS负载均衡集群——NAT地址转换模式与DR直接路由模式

1. LVS集群基本介绍 Cluster&#xff0c;集群、群集。 由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供一个访问入口&#xff08;域名或IP地址&#xff09;&#xff0c;相当于一台大型计算机。 2. 集群的类型 2.1 负载均衡群集&#xff08;Load Balanc…

Java医院信息化建设云HIS系统源码

云HIS提供标准化、信息化、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。优化就医、管理流程&#xff0c;提升患者满意度、基层首诊率&#xff0c;通过信息共享、辅助诊疗等手段&#xff0c;提高基层医生的服务能力构建和…

开具实习证明:在线实习项目介绍

大数据在线实习项目&#xff0c;是在线上为学生提供实习经验的项目。我们希望能够帮助想要在毕业后从事数据科学类工作的学生更加顺利地适应从教室到职场的转换&#xff1b;也帮助那些在工作中需要处理数据、实现数据价值的其他职能的从业者高效快速地掌握每天都能用起来的数据…

智慧用电系统

智慧用电被广泛应用&#xff0c;是由于近年来&#xff0c;我国电气火灾多发&#xff0c;造成重大人员伤亡和财产损失。为落实中央要求&#xff0c;各省、市相继颁发《积极推进电气火灾监控系统实施意见的通知》、《关于推进“智慧用电”安全隐患监管服务系统建设的通知》&#…

国标级联/流媒体音视频平台EasyCVR设备录像下载异常该如何解决?

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能支…

6.23删除二叉搜索树中的节点(LC450-M)

算法&#xff1a; 一共有五种可能的情况&#xff1a; 第一种情况&#xff1a;没找到删除的节点&#xff0c;遍历到空节点直接返回了找到删除的节点 第二种情况&#xff1a;左右孩子都为空&#xff08;叶子节点&#xff09;&#xff0c;直接删除节点&#xff0c; 返回NULL为根…

Python: any()函数

在Python中&#xff0c;any函数是一个内置函数&#xff0c;它接受一个可迭代对象作为参数&#xff0c;并返回一个布尔值。当可迭代对象中至少一个元素为真&#xff08;非零、非空、非None等&#xff09;时&#xff0c;any函数返回True&#xff1b;否则&#xff0c;返回False。 …

linux 应用开发笔记---【信号:基础】

1.基本概念 信号是发生事件时对进程的通知机制&#xff0c;也可以称为软件中断 信号的目的是用来通信的 1.硬件发生异常&#xff0c;将错误信息通知给内核&#xff0c;然后内核将相关的信号给相关的进程 2.在终端输入特殊字符产生特殊信号 3.进程调用kill()将任意信号发送…