android 圓形展開/關閉動畫
阿新 • • 發佈:2019-01-07
CircleAnimateUtils.handleAnimate(txt);
圓形動畫工具類:
public class CircleAnimateUtils {
public static void handleAnimate(final View animateView) {
//隱藏
if (animateView.getVisibility() == View.VISIBLE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
/**
* createCircularReveal 方法引數
* view 執行動畫的view
* centerX 圓心橫座標
* centerY 圓心縱座標
* startRadius 動畫開始時圓的半徑
* endRadius 動畫結束時圓的半徑
*/
final Animator animatorHide = ViewAnimationUtils.createCircularReveal(animateView,
0,
0,
//確定圓的半徑(算長寬的斜邊長,這樣半徑不會太短也不會很長效果比較舒服)
(float) Math.hypot(animateView.getWidth(), animateView.getHeight()),
0 );
animatorHide.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
animateView.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorHide.setDuration(300);
animatorHide.start();
} else {
animateView.setVisibility(View.GONE);
}
animateView.setEnabled(false);
}
//顯示
else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final Animator animator = ViewAnimationUtils.createCircularReveal(animateView,
0,
0,
0,
(float) Math.hypot(animateView.getWidth(), animateView.getHeight()));
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
animateView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.setDuration(300);
animator.start();
} else {
animateView.setVisibility(View.VISIBLE);
}
animateView.setEnabled(true);
}
}
}