android 动画 最顶层_Android UI 篇 实现一个揭露动画

f34dd04c2f48baaf6c81adc691705889.png

超详细!安卓巴士开发者大会嘉宾及主题介绍

一、应用场景

1、 先上效果图:
cd497fa1bee0cb6e2e2756a0b58514d8.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
绘制流程

可以重写的只有:

  • draw

  • onDraw (只能绘制自己,绘制不了内部子布局)

  • dispatchDraw

综上:满足条件的只有 drawdispatchDraw重写这两个都可以实现,譬如下面模拟代码:

@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面试详细个人总结

欢迎前往安卓巴士博客区投稿,技术成长于分享

期待巴友留言,共同探讨学习

60f3235ca820bd17331c1a0d5014eea9.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值