Android 如何平滑线性布局高度动画,内容繁重 Animation动画=新动画(){ @凌驾 受保护的无效应用转换(浮点插值时间,转换t){ ViewGroup.LayoutParams params=slidingPane.getLayoutParams(); int计算高度=展开高度-((int)(展开高度*插值时间)); 如果(calculatedHeight

Android 如何平滑线性布局高度动画,内容繁重 Animation动画=新动画(){ @凌驾 受保护的无效应用转换(浮点插值时间,转换t){ ViewGroup.LayoutParams params=slidingPane.getLayoutParams(); int计算高度=展开高度-((int)(展开高度*插值时间)); 如果(calculatedHeight,android,android-layout,android-animation,android-linearlayout,Android,Android Layout,Android Animation,Android Linearlayout,,而不是手动更改每个动画步骤的高度,则应尝试使用更系统的动画,如ValueAnimator,或ObjectAnimator: Animation animation = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { ViewGroup.LayoutParams params

,而不是手动更改每个动画步骤的高度,则应尝试使用更系统的动画,如
ValueAnimator
,或
ObjectAnimator

Animation animation = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            ViewGroup.LayoutParams params = slidingPane.getLayoutParams();
            int calculatedHeight = expandedHeight - ((int) (expandedHeight * interpolatedTime));
            if (calculatedHeight <= collapsedHeight) {
                calculatedHeight = collapsedHeight;
            }
            params.height = calculatedHeight;
            slidingPane.setLayoutParams(params);
            slidingPane.requestLayout();
        }

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

    };
    animation.setDuration(ANIMATION_DURATION);
    animation.setAnimationListener(animationListener);
    slidingPane.startAnimation(animation);
可以在视图上使用
pivotY
/
pivotY
来控制缩放动画的定位点

相关文件:

您应该尝试使用更系统的动画,如
ValueAnimator
ObjectAnimator
,而不是手动更改每个动画步骤的高度:

Animation animation = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            ViewGroup.LayoutParams params = slidingPane.getLayoutParams();
            int calculatedHeight = expandedHeight - ((int) (expandedHeight * interpolatedTime));
            if (calculatedHeight <= collapsedHeight) {
                calculatedHeight = collapsedHeight;
            }
            params.height = calculatedHeight;
            slidingPane.setLayoutParams(params);
            slidingPane.requestLayout();
        }

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

    };
    animation.setDuration(ANIMATION_DURATION);
    animation.setAnimationListener(animationListener);
    slidingPane.startAnimation(animation);
可以在视图上使用
pivotY
/
pivotY
来控制缩放动画的定位点

相关文件:

尝试在动画中设置插值器,如:animation.setInterpolator(new LinearInterpolator());@Mehta你能发布整个代码吗?我对这一行不太了解:)检查此扩展动画:@Mehta我使用了上述代码,但它的性能比我的差。请尝试在动画中设置插值器,如:animation.setInterpolator(new LinearInterpolator());@Mehta你能发布整个代码吗?我对这一行没什么概念:)检查这个扩展动画:@Mehta我使用了上面提到的代码,但它的性能比我的差。这会缩放布局,不会改变高度,这会导致拉伸幻灯片的可见部分,而不是动画tretching?在包含的列表中显示更多/更少的项目,而不更改其大小?它的工作原理应该与NavigationDrawer的工作原理相同,只是从下到上如果我没有弄错,NavigationDrawer动画不会更改其高度,但会滑动它(translationY),如果可以,请尝试:slidingPane.animate().translateY(0f)这将缩放布局,不会改变高度,这将导致拉伸幻灯片的可见部分,而不是拉伸?在包含的列表中显示更多/更少的项目,而不改变其大小?它的工作原理应该与NavigationDrawer的工作原理相同,只是从下到上如果我没有弄错的话,NavigationDrawer animation不会更改其高度,但会滑动它(translationY),如果可以,请尝试:slidengpane.animate().translateY(0f)