ViewPager引导页实现跟随式小圆点

ViewPager 实现带有小圆点的引导页滑动(实战) 概述 对于 ViewPager ,相信大家都不陌生,我们在 Android 开发中使用它的频率非常之高,应用启动时的引导页,主页指示标签的滑动「上一篇文章就用到了 ViewPager」以及底部的滑动,这些都是 ViewPager 的杰作 。 说个最接地气的例子,当我们新安装了一个安卓应用在手机上并启动那个界面后,十有八九会有一些可以滑动的的页面「不可以滑动的话又怎么能引导你进入应用呢?」,这... 阅读详情

众所周知,很多APP都是带引导页的,也就是传说中的ViewPager实现的,当然,我们也可以看到,在引导页的下方有小圆点指示器,小圆点指示器有两种,一种是跳跃式小圆点,也是最常见的一种,另一种就是本篇博客要讲的跟随式小圆点。
原理:跟随式效果其实就是一个小红点事先覆盖在第一页的小灰点上面,当滑动引导页的时候,小红点根据滑动的距离而不断的改变平移距离。当滑动到第二页的时候,小红点也正好覆盖住了第二个小灰点。

OK!上代码!先看一下xml里的小圆点布局,我是xml实现的小圆点,当然你也可以动态添加小圆点实现效果:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.MainActivity">
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="60dp">
        <LinearLayout
            android:id="@+id/linearlayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/point_gray"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:src="@drawable/point_gray"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:src="@drawable/point_gray"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:src="@drawable/point_gray"/>
        </LinearLayout>
        <ImageView
            android:id="@+id/point_red"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/point_red" />
    </RelativeLayout>
</RelativeLayout>

这样,一打开引导页的时候,小红点就事先默认覆盖住了第一个小灰点。

接下来看核心代码:

/**
         * 当底部红色小圆点加载完成时测出两个小灰点的距离,便于计算后面小红点动态移动的距离
         */
        point_red.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                distance =  linearlayout.getChildAt(1).getLeft() - linearlayout.getChildAt(0).getLeft();
            }
        });

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                //测出页面滚动时小红点移动的距离,并通过setLayoutParams(params)不断更新其位置
                float leftMargin = distance * (position + positionOffset);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) point_red.getLayoutParams();
                params.leftMargin = Math.round(leftMargin);
                point_red.setLayoutParams(params);
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

代码里有注释说明,相信你能看懂!

附上完整代码:

public class MainActivity extends Activity {
    private List<View> viewList;
    private ViewPager viewPager;
    private ImageView point_red;
    private int distance;
    private LinearLayout linearlayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        viewList.add(getLayoutInflater().inflate(R.layout.welcome_one,null));
        viewList.add(getLayoutInflater().inflate(R.layout.welcome_two,null));
        viewList.add(getLayoutInflater().inflate(R.layout.welcome_three,null));
        viewList.add(getLayoutInflater().inflate(R.layout.welcome_four,null));
        viewPager.setAdapter(new GuidePagerAdapter(viewList));

        /**
         * 当底部红色小圆点加载完成时测出两个小灰点的距离,便于计算后面小红点动态移动的距离
         */
        point_red.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                distance =  linearlayout.getChildAt(1).getLeft() - linearlayout.getChildAt(0).getLeft();
            }
        });

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                //测出页面滚动时小红点移动的距离,并通过setLayoutParams(params)不断更新其位置
                float leftMargin = distance * (position + positionOffset);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) point_red.getLayoutParams();
                params.leftMargin = Math.round(leftMargin);
                point_red.setLayoutParams(params);
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    private void initView() {
        viewList = new ArrayList<>();
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        point_red = (ImageView) findViewById(R.id.point_red);
        linearlayout = (LinearLayout) findViewById(R.id.linearlayout);
    }
}

安卓用ViewPager实现APP的引导页和小圆点 在模拟器上显示效果大概如下: 大概思路和代码如下: 1、首先创建一个layout布局文件, &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:/... 阅读详情

相关推荐

Android 实现闪屏页+功能引导页

转载请注明出处: http://blog.youkuaiyun.com/like_program/article/details/52961753 闪屏页和功能引导页想必大家都很熟悉了,现在很多 App 启动都有闪屏页和功能引导页,那么今天我来教下大家怎么实现闪屏页和功能引导页。

like_program 的博客 1万+

ViewPager2页面指示器(圆形)

ViewPager2页面指示器(圆形) 用法: Vp2IndicatorView indicator = findViewById(R.id.indi); ViewPager2 viewPager2 = findViewById(R.id.vp); List<Integer> list = new ArrayList<>(); list.add(R.drawable.se1); list.add(R.drawable.se2); list.add(R.drawable.se3);

C_biubiubiu的博客 2443

Android 学习笔记 App引导页(fragment+Viewpager+RadioButton(小圆点))的简单实现

学习目标: 实现由 View 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、优快云 技术博客 3 篇 3、 学习的 vlog 视频 1 个 ...

jijiyyoyo的博客 876

ViewPager的小红点跟随效果

效果如下:实现的大致原理: 根据轮播图的数量,动态添加小黑点。 小红点移动的距离,根据轮播图的移动距离实时改变 通过改变小红点的左边距达到移动的效果。 布局如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.c

xiong199208的博客 1720

Android studio ViewPager2 底部圆点指示器应用设计

【代码】Android studio ViewPager2 底部圆点指示器应用设计。

corlin6688的博客 2273

Android viewpager打造带小圆点的引导页

Android ViewPager实现带小圆点的引导页 废话直接省略 上运行图,(这里博主不会录gif动态图。。) 第一页 第二页 第三页,这里一共就三页,所以我们需要在第三页加上立即体验按钮 在点击立即体验的时候,我们 就会有这样一个思想,这是第一次进入我们的程序,我们会加载引导页,那我们加载完引导页,第二次就不让他加载了。对于这个实现其实也很简单,博主这里使用的是Sha...

迟到的微笑 4244

安卓:ViewPager及带指示圆点的

打开应用程序看到的滑动页面:滑动时无小圆点 1.在布局文件中加入ViewPager控件: 2.逻辑代码中: findViewById 找到控件:android.support.v4.view.ViewPager 设置ViewPager的适配器 自定义适配器,继承自PagerAdapter: 注意要使程序在滑到最后一张时不崩溃需在适配器中destroyItem方法里注释掉调用父

my_worldlet的博客 2807

android开机引导导航功能ViewPager(二)--增加导航页小横条指示

android开机引导导航功能ViewPager(二)--增加导航页小横条指示

android ViewPager2+TabLayout、滑动效果相关问题!

ViewPager2+TabLayout、会遇到tab点击 过度滚动问题、 比如tab一共有四页、当从第1页切换到第四页、会有动画滚动效果、 kan'qi

BirdEatBug的博客 6801

手把手教你学Simulink--基于火电发电系统的场景实例:燃煤发电机组的锅炉-汽轮机协调控制仿真

本文介绍了使用Simulink构建燃煤发电机组锅炉-汽轮机协调控制系统的仿真方法。系统包含锅炉子系统、汽轮机子系统和协调控制器三大模块,通过传递函数建模和PID控制策略实现协调控制。详细说明了从模型创建、子系统设置到控制器设计的完整流程,包括燃料供给、汽轮机模型和数据处理等关键环节。最后通过性能评估验证系统响应速度、参数稳定性和效率等指标。该仿真方法为火电系统控制策略设计和优化提供了有效工具。

MHD0815的博客 1153

Chapter 4 Ripple-Based Control Technique Part I

本文介绍了DC-DC转换器的纹波控制技术,重点分析了迟滞控制、恒定开通时间控制、恒定关断时间控制等方案的工作原理及优缺点。纹波控制无需补偿网络,具有快速瞬态响应和结构简单的优势,特别适合电池供电应用。其中,恒定开通时间控制在轻载时能自动延长关断时间,实现伪定频工作;而恒定关断时间控制轻载效率较低。文章还讨论了纹波注入技术解决Boost转换器右半平面零点问题,并比较了不同控制方案在负载瞬态下的性能表现。最后指出基于纹波的控制技术在提高调节精度和降低EMI方面的改进方向。

2304_76736886的博客 1302

ViewTreeObserver应用实例

Android实现自定义引导页(实现跟随式小圆点效果) 实现效果图如下 输入图片说明 具体实现过程可参看链接:http://www.jianshu.com/p/adb21180862a 这里主要看下实现跟随式小圆点效果的思路及知识点 实现小圆点动态跟随的思路:首要的是获得两个点之间的距离【mDistance 】,然后根据页面的移动,通过设置小圆点的 leftMargin 实现动态跟随。【根据mDistance * (position + positionOffset) 可以实时更新小白点的位】。 需要注意的

我的专栏 198

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 742

【Android】如何实现启动APP时引导页、欢迎页功能之(一)引导页功能的实现

基本上APP在第一次启动时都有引导页,本人在做APP开发时想实现这一功能,当时还不大知晓这个功能的页的具体名字,因为一直是一个人在默默的自学。我在这里就简单的给予个解释,引导页——就是APP在第一次启动时,引导用户操作,给予APP功能简单介绍的页面,一般都是APP第一次启动时才会出现,而后就不在出现。欢迎页——就是我们每次打开APP会出现的页面,接着才会自动跳转到主界面,其实现在这个欢迎页被各大厂

大帅Douk的博客 3万+

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1024

android 自定义小圆点,Android实现自定义引导页(实现跟随式小圆点效果)

实现效果图如下 这里主要看下实现跟随式小圆点效果的思路及知识点实现小圆点动态跟随的思路:首要的是获得两个点之间的距离【mDistance 】,然后根据页面的移动,通过设置小圆点的 leftMargin 实现动态跟随。【根据mDistance * (position + positionOffset) 可以实时更新小白点的位】。需要注意的是:在onCreate()中直接获得小白点(实时跟随的小圆点)...

weixin_39788051的博客 373

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

引导页的实现,用ViewPager,底下有小圆点显示以及滑动进入主页面

实习的第一个经理布置的任务就是实现引导页功能,在这和大家分享下 1.布局采用相对布局中有ViewPager和LinearLayout 代码如下:<android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:

zqr772791008的博客 2680

Autodesk Revit软件二次开发:Revit二次开发中的插件设计与实现

在 Revit 中,族是构成建筑模型的基本单元,可以是门窗、家具等。通过自定义族,可以创建符合特定需求的建筑构件。参数化设计允许族的尺寸、形状等属性根据参数变化而变化。使用 Revit API 创建自定义族涉及多个步骤,包括定义族类型、设置参数、创建几何形状等。// 创建族文档// 定义参数Parameter param = family.FamilyManager.AddParameter("Width", BuiltInParameterGroup.PG_LENGTH, "宽度");

kkchenjj的博客 2230

零基础入门篇③ PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

Python从入门到精通👉零基础入门篇③

hacker707的博客 4375

Android开发-Android应用中启动时引导页的实现

前 言 在一个Android App启动的流程中,一般先是显示启动页,然后接着是引导页(初次安装或者清除应用缓存信息或者应用更新后第一次启动会经历该流程),在接着进入登录页面或者主页(如果应用之前在安装后或者清除缓存信息后有启动过,那么应用启动时就没有经历引导页的流程,直接由启动页进入登录页或者主页的流程)。那么,下面就来看看Android App是如何实现应用启动时引导页的功能的。 新建一个...

_彼岸雨敲窗_的博客 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

玩转ViewPager系列(一),从实现引导页说起

viewpager是android里一个非常常用的控件。之前项目用到的时候,我只是从网上找几篇文章复制粘贴就好,自己也没有好好研究,所以印象不深。这次有一些时间,决心好好研究一下,并把自己的心得分享给大家。 今天我们来一步步地实现引导页功能。首先,先准备4张图片和4个小圆点,用于轮播,把他们装到2个列表里。 /** * 手动添加imageView ...

qq_39678305的博客 1401

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

第八天案例+fragment+viewPager(引导页)+小圆点+跳转

fragment+viewPager引导页+小圆点+跳转思路Activity中的代码第三个fragment中的代码 思路 1,viewpager 和fragment 做引导页 2,创建三个fragment,最后一个里面添加跳转按钮和倒计时 3,fragment和activity用handler通讯 4,主要页面逻辑在welcomeActivity和第三个fragment里面. Activity中的...

shuai_ge_feng的博客 1026

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android Stdio引导页实现——ViewPager

Android Studio引导页是用户在首次启动应用或应用更新后所看到的页面,主要用于向用户展示软件的主要功能、特色或更新内容。通过引导页,用户可以快速了解应用的基本操作和使用方法,提高用户体验。

k202310666的博客 1033

ViewPager 添加广告页面小圆点指示器效果

介绍 我们的应用几乎都有启动引导页介绍,通常是3~4张引导图,然后进入我们的主界面。大家可以发现,我们大部分引导界面都会有一种指示器(也就是小圆点,这里比较常见)。除了引导页以外呢,我们常见的广告页也经常会有这种指示器效果。 效果图 实现这种效果的方式有多种多样,虽然说很简单,但是我们可以写成一个通用的指示器类,在需要用到的地方实例化就可以了。这样就会减少代码...

你若盛开,蜜蜂自来 1万+
上一篇: TabLayout+ViewPager+Fragment(懒加载)实现导航栏
下一篇: 日夜间模式的切换
尘彦
博客等级 码龄11年 92粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值