超详细!安卓巴士开发者大会嘉宾及主题介绍
一、应用场景
1、 先上效果图:
![cd497fa1bee0cb6e2e2756a0b58514d8.gif](https://i-blog.csdnimg.cn/blog_migrate/5768d3daaed9f97751c565b54202f9b6.gif)
2、 应用场景分析:
适用于
Activity
界面跳转适用于
View
的切换支持所有
View
布局的动画效果
3、代码使用(非常简洁好用):
在你需要做动画的布局上,套上
RevealAnimationLayout
就可以了,支持套任何布局!!!
<com.revealanimation.RevealAnimationLayoutandroid:id="@+id/animat_layout"android:layout_width="match_parent"android:layout_height="wrap_content"
>
二、流程分析
1、android 5.0
其实已经拥有对应的接口 ViewAnimationUtils.createCircularReveal
,然而还是有一定的局限性:
只能再
android 5.0
上使用只提供圆形的揭露效果
也没有提供拓展其他图形接口
2、对于这个效果,我们只能自定义 View,来实现。思路步骤如下:
做一个空父布局,提供出去,可以套任何布局
在空的布局对套进来的子布局操作。
要在
draw
这个函数下手,并且要在super.draw()
之后去做剪裁,目的是确保子布局先draw
完。使用画笔
setXfermode
去实现这个动画效果。先用Path
画出圆形/矩形,重叠在画布上面,取出重叠的View
。
3、我们复写draw
函数,对draw
函数进行重写。回顾一下draw
函数的流程:
![f8c8cc2fab717458cc015492dd1bf34a.png](https://i-blog.csdnimg.cn/blog_migrate/f7996a7f36189e6734cc06d634acc6b2.jpeg)
可以重写的只有:
draw
onDraw
(只能绘制自己,绘制不了内部子布局)dispatchDraw
综上:满足条件的只有 draw
和 dispatchDraw
重写这两个都可以实现,譬如下面模拟代码:
@Override
@Override
三、代码实现
1、首先开启一个动画器,拿到动画执行的 百分比值 :mAnimatorValue
/**
* 初始化动画类
*/
2、我们再来生成个剪裁路径 mClipPath
(Path
类),需要通过百分比 mAnimatorValue
计算出 mClipPath
需要添加半径为多大的圆 :
@Override
3、最后这里我们对 Draw
下手,把生成好的 mClipPath
,画到 canvas
(整个已经绘制到的布局),使用 PorterDuff.Mode.DST_OUT
拿出 和圆重叠的部分。(其中使用了一个小技巧兼容 android 9.0
详细看下面代码)
@Override
代码很简单,就一个布局。可以用来实现 Activity
的跳转,界面部分 View
的切换。也极易拓展,建议大家下载下来看看。
github 完整源码:https://github.com/zhangchaojiong/RevealAnimationLayout最后鸣谢:gcssloop作者 给了我灵感。
大家都在看
2019最新Android常用开源库总结
Gson源码解析和它的设计模式
Android中需要知道的Java集合框架
Android & Java面试详细个人总结
欢迎前往安卓巴士博客区投稿,技术成长于分享
期待巴友留言,共同探讨学习