Как создать круговую анимацию показа в 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
Но я не нашел для этого учебника
Пожалуйста, дайте мне несколько способов реализовать эту прекрасную анимацию с помощью библиотеки дизайна
Я не знаком с этими видами, но способ создания кругового раскрытия следующий:
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()
это не совместимо. Я не нашел этот класс в пакетах библиотеки поддержки дизайна: \
версия 28 имеет эти классы
Тем не менее, этот код делает круговое раскрытие, +1 голос от меня .... даже он не отвечает на вопрос о том, как использовать классы оболочек CircularReveal ... в библиотеках поддержки дизайна
Вот как это сделать с помощью библиотеки поддержки версии 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();
}
});
}
Публикация исполняемого файла может не потребоваться в зависимости от того, как вы его используете, но это помогает с двумя потенциальными проблемами:
CircularRevealCompat.createCircularReveal.onLayout представления, поэтому они всегда будут доступны таким образом.Зная, что раскрытие начинается с середины обзора, мы также знаем, что вид будет полностью раскрыт, когда радиус раскрывающегося круга равен половине диагонали обзора.
CircularRevealCompat.createCircularReveal возвращает Animator, аналогично старому способу выполнения (ViewAnimationUtils.createCircularReveal).
По умолчанию на анимации раскрытия нет цвета сетки. Если вы хотите анимировать цвет сетки по мере того, как открывается вид, вам понадобится ObjectAnimator со специальным свойством CircularRevealWidget.CircularRevealScrimColorProperty.CIRCULAR_REVEAL_SCRIM_COLOR.
Вы также можете легко создать обратную анимацию, поменяв местами startRadius и endRadius (а также начальный и конечный цвета холста).
ObjectAnimator.ofArgb() требует как минимум Android 21
Любое решение? Я тоже пытаюсь использовать.