博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实现自定义引导页(实现跟随式小圆点效果)
阅读量:6372 次
发布时间:2019-06-23

本文共 1992 字,大约阅读时间需要 6 分钟。

  hot3.png

实现效果图如下

输入图片说明

具体实现过程可参看链接:

这里主要看下实现跟随式小圆点效果的思路及知识点

实现小圆点动态跟随的思路:首要的是获得两个点之间的距离【mDistance 】,然后根据页面的移动,通过设置小圆点的 leftMargin 实现动态跟随。【根据mDistance * (position + positionOffset) 可以实时更新小白点的位】。

需要注意的是:在onCreate()中直接获得小白点(实时跟随的小圆点)的左边距 getLeft()结果为0,这是因为View组件布局要在onResume回调后完成。所以,我们可以根据下面方法来获取

//在布局发生改变或者某个视图的可视状态发生改变时调用该事件。但此方法会被多次调用,因此需要在获取到视图的宽度和高度后执行 remove 方法移除该监听事件。mLight_dots.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                //获得两个圆点之间的距离                mDistance = mIn_ll.getChildAt(1).getLeft() - mIn_ll.getChildAt(0).getLeft();               mLight_dots.getViewTreeObserver()                        .removeGlobalOnLayoutListener(this);            }        });

监听页面的移动情况

mIn_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                //页面滚动时小白点移动的距离,并通过setLayoutParams(params)不断更新其位置                float leftMargin = mDistance * (position + positionOffset);                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)      mLight_dots.getLayoutParams();                  params.leftMargin = (int) leftMargin;                mLight_dots.setLayoutParams(params);             }            @Override            public void onPageSelected(int position) {                //页面跳转时,设置小圆点的margin                float leftMargin = mDistance * position;                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLight_dots.getLayoutParams();                params.leftMargin = (int) leftMargin;                mLight_dots.setLayoutParams(params);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }

在页面移动过程中,根据mDistance * (position + positionOffset) 可以实时更新小白点的位置。

另外我们可以了解下

转载于:https://my.oschina.net/fltsp/blog/891378

你可能感兴趣的文章
poj 1821 Fence(单调队列)
查看>>
关于Map集合的遍历总结
查看>>
【计数】【UVA11401】 Triangle Counting
查看>>
Django建站纪要(一)——做个blog
查看>>
(实现)vue.js最简实现
查看>>
RabbitMQ发送消息成功,但是接受不到消息
查看>>
nova-network创建初始化网络
查看>>
虎符遥控器(PPT遥控翻页)
查看>>
Java常用缩略词
查看>>
Java构造块,静态代码块,构造方法执行顺序
查看>>
3D打印开源切片软件Cura配置步骤
查看>>
c++读取TXT文件内容
查看>>
EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
查看>>
[android] ndk环境的搭建
查看>>
Kafka集群搭建
查看>>
js表达式
查看>>
oracle的日期相减
查看>>
半正定矩阵
查看>>
C语言面试基本问题
查看>>
这不是一篇随笔
查看>>