`
yhz61010
  • 浏览: 570487 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12452
社区版块
存档分类
最新评论

[转] Android: Expand/collapse animation

阅读更多
原文地址:https://stackoverflow.com/a/13381228/6091500

亲测可用。

import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Transformation;

public class ViewAnimation {
    public static void expand(final View v) {
        v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        final int targetHeight = v.getMeasuredHeight();

        // Older versions of android (pre API 21) cancel animations for views with a height of 0.
        v.getLayoutParams().height = 1;
        v.setVisibility(View.VISIBLE);
        Animation a = new Animation()
        {
            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {
                v.getLayoutParams().height = interpolatedTime == 1
                        ? ViewGroup.LayoutParams.WRAP_CONTENT
                        : (int)(targetHeight * interpolatedTime);
                v.requestLayout();
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };

        // 1dp/ms
        a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density));
        v.startAnimation(a);
    }

    public static void collapse(final View v) {
        final int initialHeight = v.getMeasuredHeight();

        Animation a = new Animation()
        {
            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {
                if(interpolatedTime == 1){
                    v.setVisibility(View.GONE);
                }else{
                    v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
                    v.requestLayout();
                }
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };

        // 1dp/ms
        a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
        v.startAnimation(a);
    }
}
分享到:
评论

相关推荐

    简单模拟菜单栏展开收缩效果

    在Android开发中,动画(Animation)是一个非常重要的组成部分,它为用户提供更加生动、交互性强的界面体验。本示例“简单模拟菜单栏展开收缩效果”旨在帮助初学者理解和掌握如何在Android应用中实现类似功能。下面...

    ExpandableListView使用

    `ExpandableListView`提供了一些内置的动画效果,如`ANIMATION_DURATION_EXPAND`和`ANIMATION_DURATION_COLLAPSE`,或者你可以自定义动画。 ### 8. 性能优化 由于`ExpandableListView`会创建大量的视图,因此要...

    ExpandableButtonMenu

    2. 使用XML布局实现:在Android的res/anim目录下创建动画资源文件,如expand.xml和collapse.xml,分别定义展开和收缩的动画。然后在代码中加载这些动画,并在按钮点击事件中启动相应的动画。 三、设计与交互 设计...

    安卓自定义控件相关-ExpandableLayout.zip

    5. **暴露API**:为了让其他组件能够控制ExpandableLayout的状态,需要提供如expand()、collapse()等方法,并可能需要监听器接口来通知展开或折叠事件。 在"ExpandableLayout-master"这个目录中,你应该能找到源码...

    仿豌豆荚Listview的应用描述

    4. **动画效果**:为了达到豌豆荚Listview的平滑动画效果,我们可以使用Android的Animation API。在展开和折叠时,设置适当的动画,如Alpha(透明度)动画或Scale(缩放)动画,使展开过程看起来更自然。 5. **数据...

    ExpandableListView展开折叠动画效果

    Android 提供了`Animation`类来实现动画效果。你可以创建两个动画,一个用于展开,另一个用于折叠。例如,可以使用`AlphaAnimation`改变透明度,或者使用`ScaleAnimation`改变大小,以模拟展开或折叠的动作。 ```...

    FabCircularRevealAnimation

    "FabCircularRevealAnimation"库利用了Android的`android.view.animation`包和`android.animation`包,这两个包提供了创建各种动画的能力。圆形揭示动画(Circular Reveal)是Android Lollipop(API 21)引入的一种...

Global site tag (gtag.js) - Google Analytics