Shrink/Grow DialogFragment 上带动画的布局

Shrink/Grow layout w/ animation on DialogFragment

我有一个 DialogFragment 我正在尝试制作动画,以便在 onClick() 时下方会出现一条确认信息。 我试过将 setVisibility() 与 Animator 一起使用,但这不是我想要的。我希望布局滑入动画不在之后出现,或者反过来在之前消失。

我一直在玩 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;
            }
        }
    });

这可行,但我不知道如何将新代码连接到动画师,以便我可以控制片段调整大小的速度

您可以定义自定义动画制作器,在动画的每一帧更新高度 属性。例如:

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

希望对您有所帮助!