【问题标题】:Add exapanding animation to a LinearLayout?向 LinearLayout 添加扩展动画?
【发布时间】:2018-06-13 13:41:55
【问题描述】:

实际上,如果我点击 按钮,在我的应用程序中,LinearLayout 设置 onCreate at "height:0" 设置为 "height:630" 但没有任何动画并且它立即出现,所以不好看。

如何向它添加任何动画,例如它正在弹跳或刚刚出现?

这是我的onClick 代码,我将高度设置为布局

menu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ViewGroup.LayoutParams params = recyclerContainner.getLayoutParams();
        if(params.height == 0) {
            params.height = 630;

            recyclerContainner.setLayoutParams(params);


        }else {
            params.height = 0;
            recyclerContainner.setLayoutParams(params);

        }

    }
});

我也尝试使用 BounceIterpolator 对其进行动画处理,但它仅对 LinearLayout 内的内容进行动画处理,而不是调整其大小

这是它的代码

menu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ViewGroup.LayoutParams params = recyclerContainner.getLayoutParams();
        if(params.height == 0) {

            params.height = 630;

            recyclerContainner.setLayoutParams(params);

            BounceInterpolator bounceInterpolator = new BounceInterpolator();
            ObjectAnimator anim = ObjectAnimator.ofFloat(recyclerContainner, "translationY", 100f, 0 );
            anim.setInterpolator(bounceInterpolator);
            anim.setDuration(1100).start();


        }else {
            params.height = 0;
            recyclerContainner.setLayoutParams(params);

        }

    }
});

【问题讨论】:

  • 嗯,看来你有web-dev背景...但是信不信由你,在android中,没有自动转换,你必须自己制作...你可以了解一下android中的动画here
  • 这种动画可以使用BottomSheet
  • @SanjayKumar 看起来很有趣,但我一直在寻找更简单的东西,我的意思是我还没有在我的 LinearLayout 中实现 RecyclerView,所以我必须更改很多代码来实现它
  • @DudeCoder 我尝试将 BounceInterpolator 与 ObjectAnimator 一起使用,但问题仍然是动画有效,但调整高度的主要方法却没有。

标签: android android-animation android-linearlayout


【解决方案1】:

我觉得对你来说有点困难,在执行转换的同时对其进行动画处理,不是吗?

我建议你使用this library.

一个带有各种动画的可扩展布局的android库。您可以包含可选内容并在任何地方使用。

希望对你有帮助,如果不是你的答案,请忽略。

【讨论】:

  • 这个看起来不错,我已经实现了,但我遇到了一些问题,我的意思是当我在可扩展布局上使用任何动画时,它似乎滞后
  • 我也可以设置一个静态的最大尺寸,它可以扩展吗?
  • 是的,您可以根据自己的自定义要求使用它
  • 您可以在same library. 上查看该演示,以便您更好地了解它的用途。
【解决方案2】:

试试这个:

在创建集时:

recyclerContainer.animate().scaleY(0.0f).setDuration(0);

点击时:

recyclerContainer.animate().scaleY(1.0f).setDuration(500);

编辑:这要求recyclerContainer 的初始高度为 630 高度或“弹出”高度应该是什么,如果初始高度为 0,则 0 的缩放将导致 0 :)

编辑: 新的 onclick 代码:

menu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if(isUp) {
            recyclerContainer.animate().scaleY(0.0f).setDuration(500);
            isUp = false;
        }else {
            recyclerContainer.animate().scaleY(1.0f).setDuration(500);
            isUp = false;
        }

    }
});

其中 "isUp 是一个布尔值,您在 onCreate 中设置 scaleY 后最初声明为 false。

【讨论】:

  • 动画很酷,但问题仍然是它是线性布局的任何人,但如果我点击按钮,它仍然会设置 630p 高度而没有任何动画
  • 你需要用动画替换你的onclick中的代码,见我上面的最后编辑。
  • 仍然,如果我在打开活动时将 recyclerContainer 初始化为 630 高度,它尚未打开,这不是我想要的,我的意思是我希望它比较,只要我点击按钮,我再次点击隐藏它
  • 是的,但是如果您将其设置为初始高度 630,然后您在 onCreate 中运行 recyclerContainer.animate().scaleY(0.0f).setDuration(0);,它将在可见之前缩放到 0 高度。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多