Как сделать анимацию линейного раскрытия вместо анимации кругового раскрытия в Android? - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу анимировать мою кнопку, которая открывается слева от кнопки справа от нее.То, что я хочу, это линейная анимация, а не круговая анимация.Пожалуйста, помогите мне.Спасибо.

Обновление

Я хочу два метода, которые показывают и скрывают вид на основе линейной анимации раскрытия.

1 Ответ

0 голосов
/ 06 февраля 2019

попробуйте код, описанный ниже для эффекта линейного раскрытия -

public class ViewAnimationUtils {

public static AnimatorSet createLinearReveal(final View viewToReveal, final int offsetWidth, final int offsetHeight, final int duration) {
    viewToReveal.clearAnimation();

    final int targetWidth = viewToReveal.getMeasuredWidth();
    final int targetHeight = viewToReveal.getMeasuredHeight();

    viewToReveal.getLayoutParams().height = offsetHeight;
    viewToReveal.requestLayout();

    final ValueAnimator heightAnimator = ValueAnimator
            .ofInt(offsetHeight, targetHeight)
            .setDuration(duration);
    heightAnimator.addUpdateListener(animation -> {
        viewToReveal.getLayoutParams().height = (int) animation.getAnimatedValue();
        viewToReveal.requestLayout();
    });

    final ValueAnimator widthAnimator = ValueAnimator
            .ofInt(offsetWidth, targetWidth)
            .setDuration(duration);
    widthAnimator.addUpdateListener(animation -> {
        viewToReveal.getLayoutParams().width = (int) animation.getAnimatedValue();
        viewToReveal.requestLayout();
    });

    final AnimatorSet set = new AnimatorSet();
    set.playSequentially(widthAnimator, heightAnimator);
    set.setInterpolator(new AccelerateInterpolator());
    return set;
}

}

после добавления этого класса просто передайте свой вид значения animate и смещения в метод createLinearReveal.

...