Совместимость Android Circular Reveal с библиотекой дизайна 28

Как создать круговую анимацию показа в 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

Но я не нашел для этого учебника

Пожалуйста, дайте мне несколько способов реализовать эту прекрасную анимацию с помощью библиотеки дизайна

Любое решение? Я тоже пытаюсь использовать.

AndroidRuntimeException 09.09.2018 02:57
10
1
2 997
2

Ответы 2

Я не знаком с этими видами, но способ создания кругового раскрытия следующий:

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()

это не совместимо. Я не нашел этот класс в пакетах библиотеки поддержки дизайна: \

Ali Edp 14.09.2018 21:58

версия 28 имеет эти классы

Ali Edp 31.12.2018 08:17

Тем не менее, этот код делает круговое раскрытие, +1 голос от меня .... даже он не отвечает на вопрос о том, как использовать классы оболочек CircularReveal ... в библиотеках поддержки дизайна

Declan Nnadozie 27.04.2019 11:03

Вот как это сделать с помощью библиотеки поддержки версии 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();
        }
    });
}

Публикация исполняемого файла может не потребоваться в зависимости от того, как вы его используете, но это помогает с двумя потенциальными проблемами:

  • View необходимо прикрепить к окну в момент вызова CircularRevealCompat.createCircularReveal.
  • В моем примере кода вычисляется середина представления, для чего требуются ширина и высота представления, а сообщение всегда запускается после onLayout представления, поэтому они всегда будут доступны таким образом.

Зная, что раскрытие начинается с середины обзора, мы также знаем, что вид будет полностью раскрыт, когда радиус раскрывающегося круга равен половине диагонали обзора.

CircularRevealCompat.createCircularReveal возвращает Animator, аналогично старому способу выполнения (ViewAnimationUtils.createCircularReveal).

По умолчанию на анимации раскрытия нет цвета сетки. Если вы хотите анимировать цвет сетки по мере того, как открывается вид, вам понадобится ObjectAnimator со специальным свойством CircularRevealWidget.CircularRevealScrimColorProperty.CIRCULAR_REVEAL_SCRIM_COLOR.

Вы также можете легко создать обратную анимацию, поменяв местами startRadius и endRadius (а также начальный и конечный цвета холста).

ObjectAnimator.ofArgb() требует как минимум Android 21
Ammar Mohammad 10.06.2019 15:51

Другие вопросы по теме