parent
							
								
									f98ce6f6e4
								
							
						
					
					
						commit
						2e89356efe
					
				| @ -1,102 +0,0 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationUtils; | ||||
| 
 | ||||
| import com.android.base.R; | ||||
| 
 | ||||
| import androidx.fragment.app.FragmentTransaction; | ||||
| 
 | ||||
| public final class AnimatorHelper { | ||||
| 
 | ||||
|     private Animation noneAnim, noneAnimFixed; | ||||
|     private Animation enterAnim, exitAnim, popEnterAnim, popExitAnim; | ||||
| 
 | ||||
|     private Context context; | ||||
|     private FragmentAnimator fragmentAnimator; | ||||
| 
 | ||||
|     AnimatorHelper(Context context, FragmentAnimator fragmentAnimator) { | ||||
|         this.context = context; | ||||
|         notifyChanged(fragmentAnimator); | ||||
|     } | ||||
| 
 | ||||
|     void notifyChanged(FragmentAnimator fragmentAnimator) { | ||||
|         this.fragmentAnimator = fragmentAnimator; | ||||
|         if (fragmentAnimator != null) { | ||||
|             initEnterAnim(); | ||||
|             initExitAnim(); | ||||
|             initPopEnterAnim(); | ||||
|             initPopExitAnim(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public Animation getNoneAnim() { | ||||
|         if (noneAnim == null) { | ||||
|             noneAnim = AnimationUtils.loadAnimation(context, R.anim.no_anim); | ||||
|         } | ||||
|         return noneAnim; | ||||
|     } | ||||
| 
 | ||||
|     public Animation getNoneAnimFixed() { | ||||
|         if (noneAnimFixed == null) { | ||||
|             noneAnimFixed = new Animation() { | ||||
|             }; | ||||
|         } | ||||
|         return noneAnimFixed; | ||||
|     } | ||||
| 
 | ||||
|     private Animation initEnterAnim() { | ||||
|         if (fragmentAnimator.getEnter() == 0) { | ||||
|             enterAnim = AnimationUtils.loadAnimation(context, R.anim.no_anim); | ||||
|         } else { | ||||
|             enterAnim = AnimationUtils.loadAnimation(context, fragmentAnimator.getEnter()); | ||||
|         } | ||||
|         return enterAnim; | ||||
|     } | ||||
| 
 | ||||
|     private Animation initExitAnim() { | ||||
|         if (fragmentAnimator.getExit() == 0) { | ||||
|             exitAnim = AnimationUtils.loadAnimation(context, R.anim.no_anim); | ||||
|         } else { | ||||
|             exitAnim = AnimationUtils.loadAnimation(context, fragmentAnimator.getExit()); | ||||
|         } | ||||
|         return exitAnim; | ||||
|     } | ||||
| 
 | ||||
|     private Animation initPopEnterAnim() { | ||||
|         if (fragmentAnimator.getPopEnter() == 0) { | ||||
|             popEnterAnim = AnimationUtils.loadAnimation(context, R.anim.no_anim); | ||||
|         } else { | ||||
|             popEnterAnim = AnimationUtils.loadAnimation(context, fragmentAnimator.getPopEnter()); | ||||
|         } | ||||
|         return popEnterAnim; | ||||
|     } | ||||
| 
 | ||||
|     private Animation initPopExitAnim() { | ||||
|         if (fragmentAnimator.getPopExit() == 0) { | ||||
|             popExitAnim = AnimationUtils.loadAnimation(context, R.anim.no_anim); | ||||
|         } else { | ||||
|             popExitAnim = AnimationUtils.loadAnimation(context, fragmentAnimator.getPopExit()); | ||||
|         } | ||||
|         return popExitAnim; | ||||
|     } | ||||
| 
 | ||||
|     Animation onCreateAnimation(BaseFragment baseFragment, int transit, boolean enter, int nextAnim) { | ||||
|         if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { | ||||
|             if (enter) { | ||||
|                 return enterAnim; | ||||
|             } else { | ||||
|                 return popExitAnim; | ||||
|             } | ||||
|         } else if (transit == FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) { | ||||
|             if (enter) { | ||||
|                 return popEnterAnim; | ||||
|             } else { | ||||
|                 return exitAnim; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,44 +1,32 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationUtils; | ||||
| 
 | ||||
| import com.android.base.R; | ||||
| import com.android.base.utils.BaseUtils; | ||||
| 
 | ||||
| 
 | ||||
| public class DefaultHorizontalAnimator extends FragmentAnimator implements Parcelable { | ||||
| public class DefaultHorizontalAnimator implements FragmentAnimator { | ||||
| 
 | ||||
|     public DefaultHorizontalAnimator() { | ||||
|         enter = R.anim.h_fragment_enter; | ||||
|         exit = R.anim.h_fragment_exit; | ||||
|         popEnter = R.anim.h_fragment_pop_enter; | ||||
|         popExit = R.anim.h_fragment_pop_exit; | ||||
|     @Override | ||||
|     public Animation makeOpenEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.h_fragment_open_enter); | ||||
|     } | ||||
| 
 | ||||
|     protected DefaultHorizontalAnimator(Parcel in) { | ||||
|         super(in); | ||||
|     @Override | ||||
|     public Animation makeOpenExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.h_fragment_open_exit); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void writeToParcel(Parcel dest, int flags) { | ||||
|         super.writeToParcel(dest, flags); | ||||
|     public Animation makeCloseEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.h_fragment_close_enter); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     public Animation makeCloseExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.h_fragment_close_exit); | ||||
|     } | ||||
| 
 | ||||
|     public static final Creator<DefaultHorizontalAnimator> CREATOR = new Creator<DefaultHorizontalAnimator>() { | ||||
|         @Override | ||||
|         public DefaultHorizontalAnimator createFromParcel(Parcel in) { | ||||
|             return new DefaultHorizontalAnimator(in); | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         public DefaultHorizontalAnimator[] newArray(int size) { | ||||
|             return new DefaultHorizontalAnimator[size]; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| } | ||||
| @ -1,42 +1,32 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| 
 | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationUtils; | ||||
| 
 | ||||
| public class DefaultNoAnimator extends FragmentAnimator implements Parcelable { | ||||
| import com.android.base.R; | ||||
| import com.android.base.utils.BaseUtils; | ||||
| 
 | ||||
|     public DefaultNoAnimator() { | ||||
|         enter = 0; | ||||
|         exit = 0; | ||||
|         popEnter = 0; | ||||
|         popExit = 0; | ||||
|     } | ||||
| public class DefaultNoAnimator implements FragmentAnimator { | ||||
| 
 | ||||
|     protected DefaultNoAnimator(Parcel in) { | ||||
|         super(in); | ||||
|     @Override | ||||
|     public Animation makeOpenEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.base_no_anim); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void writeToParcel(Parcel dest, int flags) { | ||||
|         super.writeToParcel(dest, flags); | ||||
|     public Animation makeOpenExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.base_no_anim); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     public Animation makeCloseEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.base_no_anim); | ||||
|     } | ||||
| 
 | ||||
|     public static final Creator<DefaultNoAnimator> CREATOR = new Creator<DefaultNoAnimator>() { | ||||
|         @Override | ||||
|         public DefaultNoAnimator createFromParcel(Parcel in) { | ||||
|             return new DefaultNoAnimator(in); | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         public DefaultNoAnimator[] newArray(int size) { | ||||
|             return new DefaultNoAnimator[size]; | ||||
|         } | ||||
|     }; | ||||
|     @Override | ||||
|     public Animation makeCloseExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.base_no_anim); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| 
 | ||||
| import android.view.animation.AlphaAnimation; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationSet; | ||||
| import android.view.animation.DecelerateInterpolator; | ||||
| import android.view.animation.Interpolator; | ||||
| import android.view.animation.ScaleAnimation; | ||||
| 
 | ||||
| 
 | ||||
| public class DefaultScaleAnimator implements FragmentAnimator { | ||||
| 
 | ||||
|     private static final Interpolator DECELERATE_QUINT = new DecelerateInterpolator(2.5f); | ||||
|     private static final Interpolator DECELERATE_CUBIC = new DecelerateInterpolator(1.5f); | ||||
| 
 | ||||
|     private static final int ANIM_DUR = 220; | ||||
| 
 | ||||
|     @Override | ||||
|     public Animation makeOpenEnter() { | ||||
|         return makeOpenCloseAnimation(1.125f, 1.0f, 0, 1); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Animation makeOpenExit() { | ||||
|         return makeOpenCloseAnimation(1.0f, .975f, 1, 0); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Animation makeCloseEnter() { | ||||
|         return makeOpenCloseAnimation(.975f, 1.0f, 0, 1); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Animation makeCloseExit() { | ||||
|         return makeOpenCloseAnimation(1.0f, 1.075f, 1, 0); | ||||
|     } | ||||
| 
 | ||||
|     private static Animation makeOpenCloseAnimation(float startScale, float endScale, float startAlpha, float endAlpha) { | ||||
|         AnimationSet set = new AnimationSet(false); | ||||
| 
 | ||||
|         ScaleAnimation scale = new ScaleAnimation(startScale, endScale, startScale, endScale, | ||||
|                 Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f); | ||||
|         scale.setInterpolator(DECELERATE_QUINT); | ||||
|         scale.setDuration(ANIM_DUR); | ||||
|         set.addAnimation(scale); | ||||
| 
 | ||||
|         AlphaAnimation alpha = new AlphaAnimation(startAlpha, endAlpha); | ||||
|         alpha.setInterpolator(DECELERATE_CUBIC); | ||||
|         alpha.setDuration(ANIM_DUR); | ||||
|         set.addAnimation(alpha); | ||||
| 
 | ||||
|         return set; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,43 +1,31 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationUtils; | ||||
| 
 | ||||
| import com.android.base.R; | ||||
| import com.android.base.utils.BaseUtils; | ||||
| 
 | ||||
| public class DefaultVerticalAnimator extends FragmentAnimator implements Parcelable { | ||||
| public class DefaultVerticalAnimator implements FragmentAnimator { | ||||
| 
 | ||||
|     public DefaultVerticalAnimator() { | ||||
|         enter = R.anim.v_fragment_enter; | ||||
|         exit = R.anim.v_fragment_exit; | ||||
|         popEnter = R.anim.v_fragment_pop_enter; | ||||
|         popExit = R.anim.v_fragment_pop_exit; | ||||
|     @Override | ||||
|     public Animation makeOpenEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.v_fragment_open_enter); | ||||
|     } | ||||
| 
 | ||||
|     protected DefaultVerticalAnimator(Parcel in) { | ||||
|         super(in); | ||||
|     @Override | ||||
|     public Animation makeOpenExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.v_fragment_open_exit); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void writeToParcel(Parcel dest, int flags) { | ||||
|         super.writeToParcel(dest, flags); | ||||
|     public Animation makeCloseEnter() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.v_fragment_close_enter); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     public Animation makeCloseExit() { | ||||
|         return AnimationUtils.loadAnimation(BaseUtils.getAppContext(), R.anim.v_fragment_close_exit); | ||||
|     } | ||||
| 
 | ||||
|     public static final Creator<DefaultVerticalAnimator> CREATOR = new Creator<DefaultVerticalAnimator>() { | ||||
|         @Override | ||||
|         public DefaultVerticalAnimator createFromParcel(Parcel in) { | ||||
|             return new DefaultVerticalAnimator(in); | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         public DefaultVerticalAnimator[] newArray(int size) { | ||||
|             return new DefaultVerticalAnimator[size]; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| } | ||||
| @ -1,105 +1,15 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.view.animation.Animation; | ||||
| 
 | ||||
| import androidx.annotation.AnimRes; | ||||
| public interface FragmentAnimator { | ||||
| 
 | ||||
| public class FragmentAnimator implements Parcelable { | ||||
|     Animation makeOpenEnter(); | ||||
| 
 | ||||
|     @AnimRes protected int enter; | ||||
|     @AnimRes protected int exit; | ||||
|     @AnimRes protected int popEnter; | ||||
|     @AnimRes protected int popExit; | ||||
|     Animation makeOpenExit(); | ||||
| 
 | ||||
|     public FragmentAnimator() { | ||||
|     } | ||||
|     Animation makeCloseEnter(); | ||||
| 
 | ||||
|     public FragmentAnimator(int enter, int exit) { | ||||
|         this.enter = enter; | ||||
|         this.exit = exit; | ||||
|     } | ||||
| 
 | ||||
|     public FragmentAnimator(int enter, int exit, int popEnter, int popExit) { | ||||
|         this.enter = enter; | ||||
|         this.exit = exit; | ||||
|         this.popEnter = popEnter; | ||||
|         this.popExit = popExit; | ||||
|     } | ||||
| 
 | ||||
|     public FragmentAnimator copy() { | ||||
|         return new FragmentAnimator(getEnter(), getExit(), getPopEnter(), getPopExit()); | ||||
|     } | ||||
| 
 | ||||
|     protected FragmentAnimator(Parcel in) { | ||||
|         enter = in.readInt(); | ||||
|         exit = in.readInt(); | ||||
|         popEnter = in.readInt(); | ||||
|         popExit = in.readInt(); | ||||
|     } | ||||
| 
 | ||||
|     public static final Creator<FragmentAnimator> CREATOR = new Creator<FragmentAnimator>() { | ||||
|         @Override | ||||
|         public FragmentAnimator createFromParcel(Parcel in) { | ||||
|             return new FragmentAnimator(in); | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         public FragmentAnimator[] newArray(int size) { | ||||
|             return new FragmentAnimator[size]; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     public int getEnter() { | ||||
|         return enter; | ||||
|     } | ||||
| 
 | ||||
|     public FragmentAnimator setEnter(int enter) { | ||||
|         this.enter = enter; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public int getExit() { | ||||
|         return exit; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * enter animation | ||||
|      */ | ||||
|     public FragmentAnimator setExit(int exit) { | ||||
|         this.exit = exit; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public int getPopEnter() { | ||||
|         return popEnter; | ||||
|     } | ||||
| 
 | ||||
|     public FragmentAnimator setPopEnter(int popEnter) { | ||||
|         this.popEnter = popEnter; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public int getPopExit() { | ||||
|         return popExit; | ||||
|     } | ||||
| 
 | ||||
|     public FragmentAnimator setPopExit(int popExit) { | ||||
|         this.popExit = popExit; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void writeToParcel(Parcel dest, int flags) { | ||||
|         dest.writeInt(enter); | ||||
|         dest.writeInt(exit); | ||||
|         dest.writeInt(popEnter); | ||||
|         dest.writeInt(popExit); | ||||
|     } | ||||
|     Animation makeCloseExit(); | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,103 @@ | ||||
| package com.android.base.app.fragment; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.view.animation.Animation; | ||||
| import android.view.animation.AnimationUtils; | ||||
| 
 | ||||
| import com.android.base.R; | ||||
| 
 | ||||
| import androidx.fragment.app.FragmentTransaction; | ||||
| 
 | ||||
| public final class FragmentAnimatorHelper { | ||||
| 
 | ||||
|     private Context context; | ||||
|     private FragmentAnimator fragmentAnimator; | ||||
| 
 | ||||
|     FragmentAnimatorHelper(Context context, FragmentAnimator fragmentAnimator) { | ||||
|         this.context = context; | ||||
|         this.fragmentAnimator = fragmentAnimator; | ||||
|     } | ||||
| 
 | ||||
|     public void changeAnimation(FragmentAnimator fragmentAnimator) { | ||||
|         this.fragmentAnimator = fragmentAnimator; | ||||
|     } | ||||
| 
 | ||||
|     public Animation getNoneAnim() { | ||||
|         return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|     } | ||||
| 
 | ||||
|     public Animation getNoneAnimFixed() { | ||||
|         return new Animation() { | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     private Animation initEnterAnim() { | ||||
|         if (fragmentAnimator == null) { | ||||
|             return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|         } else { | ||||
|             Animation animation = fragmentAnimator.makeOpenEnter(); | ||||
|             if (animation == null) { | ||||
|                 return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|             } else { | ||||
|                 return animation; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Animation initExitAnim() { | ||||
|         if (fragmentAnimator == null) { | ||||
|             return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|         } else { | ||||
|             Animation animation = fragmentAnimator.makeOpenExit(); | ||||
|             if (animation == null) { | ||||
|                 return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|             } else { | ||||
|                 return animation; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Animation initPopEnterAnim() { | ||||
|         if (fragmentAnimator == null) { | ||||
|             return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|         } else { | ||||
|             Animation animation = fragmentAnimator.makeCloseEnter(); | ||||
|             if (animation == null) { | ||||
|                 return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|             } else { | ||||
|                 return animation; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Animation initPopExitAnim() { | ||||
|         if (fragmentAnimator == null) { | ||||
|             return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|         } else { | ||||
|             Animation animation = fragmentAnimator.makeCloseExit(); | ||||
|             if (animation == null) { | ||||
|                 return AnimationUtils.loadAnimation(context, R.anim.base_no_anim); | ||||
|             } else { | ||||
|                 return animation; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     Animation onCreateAnimation(int transit, boolean enter) { | ||||
|         if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { | ||||
|             if (enter) { | ||||
|                 return initEnterAnim(); | ||||
|             } else { | ||||
|                 return initExitAnim(); | ||||
|             } | ||||
|         } else if (transit == FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) { | ||||
|             if (enter) { | ||||
|                 return initPopEnterAnim(); | ||||
|             } else { | ||||
|                 return initPopExitAnim(); | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <translate | ||||
|         android:duration="300" | ||||
|         android:fromXDelta="0" | ||||
|         android:interpolator="@android:anim/accelerate_interpolator" | ||||
|         android:toXDelta="100%p" /> | ||||
| 
 | ||||
|     <alpha | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="0.9" | ||||
|         android:fillEnabled="true" | ||||
|         android:fillBefore="false" | ||||
|         android:fillAfter="true" | ||||
|         android:interpolator="@android:anim/decelerate_interpolator" | ||||
|         android:duration="300" /> | ||||
| 
 | ||||
| </set> | ||||
| @ -1,10 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <translate | ||||
|         android:duration="300" | ||||
|         android:fromXDelta="0" | ||||
|         android:interpolator="@android:anim/accelerate_interpolator" | ||||
|         android:toXDelta="100%p" /> | ||||
| 
 | ||||
| </set> | ||||
| @ -0,0 +1,19 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:duration="300"> | ||||
| 
 | ||||
|     <translate | ||||
|         android:fromXDelta="0%p" | ||||
|         android:toXDelta="-26%p" /> | ||||
| 
 | ||||
|     <alpha | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="0.3" | ||||
|         android:fillEnabled="true" | ||||
|         android:fillBefore="false" | ||||
|         android:fillAfter="true" | ||||
|         android:interpolator="@android:anim/decelerate_interpolator" | ||||
|         android:duration="300" /> | ||||
| 
 | ||||
| </set> | ||||
| @ -1,9 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:duration="300"> | ||||
| 
 | ||||
|     <translate | ||||
|         android:fromXDelta="0%p" | ||||
|         android:toXDelta="-26%p" /> | ||||
| 
 | ||||
| </set> | ||||
| @ -1,9 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:duration="300"> | ||||
| 
 | ||||
|     <alpha | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="1.0" /> | ||||
| 
 | ||||
| </set> | ||||
					Loading…
					
					
				
		Reference in new issue