Androidデザインライブラリバージョン28を使用して円形のリビールアニメーションを作成する方法
私は彼らがこのアイテムのような言葉を明らかにしているいくつかのクラスを見ました:
Android.support.design.circularreveal.CircularRevealFrameLayout
Android.support.design.circularreveal.CircularRevealGridLayout
Android.support.design.circularreveal.CircularRevealLinearLayout
Android.support.design.circularreveal.CircularRevealRelativeLayout
Android.support.design.circularreveal.cardview.CircularRevealCardView
Android.support.design.circularreveal.coordinatorlayout.CircularRevealCoordinatorLayout
しかし、そのためのチュートリアルは見つかりませんでした
デザインライブラリでこの美しいアニメーションを実装する方法を教えてください
サポートライブラリのバージョン28.0.0または新しいAndroidXライブラリを使用してこれを行う方法は次のとおりです。
private <T extends View & CircularRevealWidget> void circularRevealFromMiddle(@NonNull final T circularRevealWidget) {
circularRevealWidget.post(new Runnable() {
@Override
public void run() {
int viewWidth = circularRevealWidget.getWidth();
int viewHeight = circularRevealWidget.getHeight();
int viewDiagonal = (int) Math.sqrt(viewWidth * viewWidth + viewHeight * viewHeight);
final AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(
CircularRevealCompat.createCircularReveal(circularRevealWidget, viewWidth / 2, viewHeight / 2, 10, viewDiagonal / 2),
ObjectAnimator.ofArgb(circularRevealWidget, CircularRevealWidget.CircularRevealScrimColorProperty.CIRCULAR_REVEAL_SCRIM_COLOR, Color.RED, Color.TRANSPARENT));
animatorSet.setDuration(5000);
animatorSet.start();
}
});
}
ランナブルの使用方法によっては、ランナブルの投稿は必要ない場合がありますが、2つの潜在的な問題に役立ちます。
CircularRevealCompat.createCircularReveal
を呼び出す時点でウィンドウにアタッチする必要がありますonLayout
の後に実行されるため、これらは常にこの方法で利用できます。リビールがビューの中央から始まることを知っているので、リビール円の半径がビューの対角線の半分に等しいときにビューが完全にリビールされることもわかっています。
CircularRevealCompat.createCircularReveal
は、古い方法(ViewAnimationUtils.createCircularReveal
)と同様に、Animator
を返します。
デフォルトでは、リビールアニメーションにはスクリムカラーはありません。ビューが表示されているときにスクリムカラーをアニメーション化する場合は、特別なプロパティCircularRevealWidget.CircularRevealScrimColorProperty.CIRCULAR_REVEAL_SCRIM_COLOR
のObjectAnimator
が必要です。
StartRadiusとendRadius(およびスクリムの開始色と終了色)を入れ替えることで、逆方向のアニメーションも簡単に作成できます。
私はそれらのビューに精通していませんが、円形のリビールを作成する方法は次のとおりです。
val view= ... //Get your view
val cx = view.width / 2
val cy = view.height / 2
val finalRadius = Math.hypot(cx, cy)
val anim = ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius) //this is the important one here
anim.start()