Сжатие / Увеличение макета с анимацией на DialogFragment - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть DialogFragment Я пытаюсь анимировать, чтобы при появлении onClick() 'внизу появилось подтверждение. Я пытался использовать setVisibility() с аниматором, но это не то, что я ищу. Я хочу, чтобы макет вставлялся, а анимация не появлялась после или наоборот исчезала раньше.

Я играл с кодом из Github здесь https://github.com/ThePreviousOne/Example `

    handle.setOnClickListener( new View.OnClickListener() {
            float startHeight;

            @Override
            public void onClick(View v) {

            startHeight = slideDownView.getHeight();

            // Adjust the slide down height immediately with touch movements.
                if (down) {
                LayoutParams params = slideDownView.getLayoutParams();
                params.height = (int) (startHeight - 300);
                slideDownView.setLayoutParams(params);
                down = false;
            } else {
                LayoutParams params = slideDownView.getLayoutParams();
                params.height = (int) (startHeight + 300);
                slideDownView.setLayoutParams(params);
                down = true;
            }
        }
    });

Это работает, но я не знаю, как подключить новый код к аниматору, чтобы я мог контролировать скорость изменения размера фрагмента

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете определить пользовательский аниматор, который обновляет свойство высоты в каждом кадре анимации. Например:

int startHeight = slideDownView.getHeight();
// Note that you should not hardcode "300" as that will be different pixel values on
// different devices - get the value from a dimen resource or scale by the
// device density
int endHeight = startHeight - getDistanceToAnimate();

// Create a simple int animator that animates between the starting and ending height
ValueAnimator animator = ValueAnimator.ofInt(startHeight, endHeight);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        // On each frame, update the view height
        int value = (Integer) valueAnimator.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
        layoutParams.height = value;
        view.setLayoutParams(layoutParams);
    }

    @Override
    public void onAnimationEnd(Animator animation) {
       // Once the animation finishes, you might have to update the view's final
       // height and / or its `layout_height` attribute.
    }
});

animator.setDuration(getAnimationTime());
animator.start();

Надеюсь, это поможет!

...