【问题标题】:Android slide in/out layout with animation带有动画的Android滑入/滑出布局
【发布时间】:2013-01-09 13:26:30
【问题描述】:

我已经用谷歌搜索了很多关于这个问题的信息。

我有一个带有 3 个 LinearLayout 的 LinearLayout。

第一个类似于第二个的标题。 最后一个只是一些其他的内容。

我现在不想向上/向下滑动第二个布局。 这段代码可以正常工作:

向下滑动:

Animation a = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.show_zeiten); 
                a.setFillAfter(true); 
                zeiten_sonstigeZeiten_Layout.startAnimation(a); 
                zeiten_sonstigeZeiten_Layout.setVisibility(View.VISIBLE);

我的问题是 3 布局在动画开始时立即跳转到他的新位置。 我想实现 3. 布局顺利滑到第二个下方。

我的动画

<set xmlns:android="http://schemas.android.com/apk/res/android"  
android:fillEnabled="true"  
android:interpolator="@android:anim/accelerate_interpolator" >  
<translate       
      android:duration="@android:integer/config_mediumAnimTime"    
      android:fromYDelta="-100%"      
         android:toYDelta="0" /> 

有没有人提示我如何做出这种行为?

感谢您的帮助! 最好的祝福 施万迪

编辑:

我尝试添加一个动画监听器,但没有一个方法被调用:

Animation a = AnimationUtils.loadAnimation(context, R.anim.show_zeiten); 
                a.setFillAfter(true); 

                a.setAnimationListener(new AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        Log.e(TAG,"onAnimationStart");
                                }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        Log.e(TAG,"onAnimationRepeat");
                                }

                    @Override
                    public void onAnimationEnd(Animation animation) {

                        Log.e(TAG,"onAnimationEnd");
                        zeiten_sonstigeZeiten_Layout.setVisibility(View.VISIBLE);

                                }
                });


                zeiten_sonstigeZeiten_Layout.startAnimation(a); 

【问题讨论】:

    标签: java android animation slidedown


    【解决方案1】:

    您在动画开始时进行更改。 最好的方法是添加一个AnimationListener,并在动画结束后更改布局。

    yourAnimationObject.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                        }
    
            @Override
            public void onAnimationRepeat(Animation animation) {
                        }
    
            @Override
            public void onAnimationEnd(Animation animation) {
                // setLayoutParams here 
                        }
        });
    

    【讨论】:

    • 感谢您的回答。但是这些方法都没有被调用。 ://
    • 我的动画好像没有开始。我打电话给 zeiten_sonstigeZeiten_Layout.startAnimation(a);应该没问题吧?
    • 是的。你应该使用startAnimation()开始你的动画。
    • 我知道这已经晚了,但你能澄清一下吗?你到底在 onAnimationEnd 中放了什么?
    • @you786: 动画只在新位置绘制视图,但在动画结束时必须更改其实际位置。这通常使用视图的setLayoutParams()onAnimationEnd() 内完成。
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多