Android动画(四):RevealEffect/揭露动画

RevealEffect

见识背景色扩散的效果,可以给任意的View添加这种效果。
当您显示或隐藏一组 UI 元素时,揭露动画可为用户提供视觉连续性。ViewAnimationUtils.createCircularReveal() 方法让您能够为裁剪区域添加动画以揭露或隐藏视图。

效果图

这里写图片描述

代码

主要的类ViewAnimationUtil

Animator animator = ViewAnimationUtils.createCircularReveal(tv, 0, 0, 0, (float) Math.hypot(tv.getWidth(), tv.getHeight()));
animator.start();

还有其它的设置:

animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(2000);
>=Android5.0 API>=21才可以使用
createCircularReveal (View view,  动画作用的View
                int centerX,      圆中心的x坐标
                int centerY,      圆中心的y坐标
                float startRadius, 圆的开始半径
                float endRadius)   圆的结束半径

当TextView由View.VISIBLEView.INVISIBLE,时,startRadius=圆半径,endRadius=0
当TextView由View.INVISIBLEView.VISIBLE,时,startRadius=0,endRadius=圆半径

centerX``centerY可以是0,也可以是:

cx = (tv.getLeft() + tv.getRight()) / 2;
cy = (tv.getTop()+tv.getBottom())/2;

源码

google sample: https://github.com/googlesamples/android-RevealEffectBasic

Demo: https://git.oschina.net/AnimationDemo/RevealEffect
Demo:https://git.oschina.net/MaterialDisign/ViewAnimationUtils01.git

当点击Button,时,根据TextView来判断圆的放大与缩小。

if (tv.getVisibility() == View.VISIBLE) {
//radius = tv.getWidth();
radius = (int) Math.hypot(tv.getWidth(),tv.getHeight());
Animator animator = ViewAnimationUtils.createCircularReveal(tv, cx, cy, radius, 0);
animator.setDuration(6000);
animator.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {

    }

    @Override
    public void onAnimationEnd(Animator animation) {
        tv.setVisibility(View.INVISIBLE);
    }

    @Override
    public void onAnimationCancel(Animator animation) {

    }

    @Override
    public void onAnimationRepeat(Animator animation) {

    }
});
animator.start();
} else {
    radius = Math.max(tv.getWidth(), tv.getHeight());
    Animator animator = ViewAnimationUtils.createCircularReveal(tv, cx, cy, 0, radius);
    animator.setDuration(6000);
    tv.setVisibility(View.VISIBLE);
    animator.start();
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值