简体   繁体   中英

Android slide in/out layout with animation

i have googled a lot about this problem.

I have a LinearLayout with 3 LinearLayouts in it.

The first one is like a header for the second one. And the last one is just some other content.

I now wan´t to slide up/down the second Layout. That works fine with this code:

For sliding down:

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

My problem is that the 3 Layout immediately jumps done to his new position when the animation starts. I would like to achieve that the 3. Layout slides down below the second one smoothly.

My animation

<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" /> 

Has anyone a hint how i can make this behavior?

Thank you for your help! Best regards schwandi

EDIT:

i have tryed to add a animationListener, but none of the methods gets called:

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

You are making the changes when the animation starts. The best method is to add an AnimationListener and do the layout changes once the animation ends.

yourAnimationObject.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
                    }

        @Override
        public void onAnimationRepeat(Animation animation) {
                    }

        @Override
        public void onAnimationEnd(Animation animation) {
            // setLayoutParams here 
                    }
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM