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.VISIBLE
到View.INVISIBLE
,时,startRadius=圆半径,endRadius=0
;
当TextView由View.INVISIBLE
到View.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();
}