Răsfoiți Sursa

0.0.46.beta12 ready
- BottomDialog、BottomMenu、CustomDialog、FullScreenDialog、GuideDialog、InputDialog、MessageDialog、PopMenu、PopNotification、PopTip、TipDialog、WaitDialog 新增 `.setDialogXAnimImpl(DialogXAnimInterface)` 用于完全自定义启动和关闭动画;
- PopMenu 增加 `.hideWithExitAnim()` 方法用于模拟关闭菜单动画的隐藏功能;

kongzue 2 ani în urmă
părinte
comite
e79fdad7a5

+ 43 - 15
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -27,12 +27,14 @@ import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
+import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
 import com.kongzue.dialogx.interfaces.DialogXStyle;
 import com.kongzue.dialogx.interfaces.NoTouchInterface;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
+import com.kongzue.dialogx.util.ObjectRunnable;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 
@@ -71,6 +73,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
     protected OnDialogButtonClickListener<PopTip> onPopTipClickListener;
     protected BOOLEAN tintIcon;
     protected float backgroundRadius = -1;
+    protected DialogXAnimInterface<PopTip> dialogXAnimImpl;
     
     protected int iconResId;
     protected CharSequence message;
@@ -267,7 +270,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
     }
     
     public PopTip show() {
-        if (isHide && getDialogView() != null){
+        if (isHide && getDialogView() != null) {
             getDialogView().setVisibility(View.VISIBLE);
             return this;
         }
@@ -522,19 +525,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
             boxRoot.post(new Runnable() {
                 @Override
                 public void run() {
-                    Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId == 0 ? R.anim.anim_dialogx_default_enter : enterAnimResId);
-                    enterAnim.setInterpolator(new DecelerateInterpolator(2f));
-                    if (enterAnimDuration != -1) {
-                        enterAnim.setDuration(enterAnimDuration);
-                    }
-                    enterAnim.setFillAfter(true);
-                    boxBody.startAnimation(enterAnim);
-                    
-                    boxRoot.animate()
-                            .setDuration(enterAnimDuration == -1 ? enterAnim.getDuration() : enterAnimDuration)
-                            .alpha(1f)
-                            .setInterpolator(new DecelerateInterpolator())
-                            .setListener(null);
+                    getDialogXAnimImpl().doShowAnim(me, null);
                 }
             });
             
@@ -635,7 +626,34 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                 boxRoot.post(new Runnable() {
                     @Override
                     public void run() {
+                        getDialogXAnimImpl().doExitAnim(me, null);
+                    }
+                });
+            }
+        }
+        
+        protected DialogXAnimInterface<PopTip> getDialogXAnimImpl() {
+            if (dialogXAnimImpl == null) {
+                dialogXAnimImpl = new DialogXAnimInterface<PopTip>() {
+                    @Override
+                    public void doShowAnim(PopTip dialog, ObjectRunnable<Float> animProgress) {
+                        Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId == 0 ? R.anim.anim_dialogx_default_enter : enterAnimResId);
+                        enterAnim.setInterpolator(new DecelerateInterpolator(2f));
+                        if (enterAnimDuration != -1) {
+                            enterAnim.setDuration(enterAnimDuration);
+                        }
+                        enterAnim.setFillAfter(true);
+                        boxBody.startAnimation(enterAnim);
                         
+                        boxRoot.animate()
+                                .setDuration(enterAnimDuration == -1 ? enterAnim.getDuration() : enterAnimDuration)
+                                .alpha(1f)
+                                .setInterpolator(new DecelerateInterpolator())
+                                .setListener(null);
+                    }
+                    
+                    @Override
+                    public void doExitAnim(PopTip dialog, ObjectRunnable<Float> animProgress) {
                         Animation exitAnim = AnimationUtils.loadAnimation(getTopActivity() == null ? boxRoot.getContext() : getTopActivity(), exitAnimResId == 0 ? R.anim.anim_dialogx_default_exit : exitAnimResId);
                         if (exitAnimDuration != -1) {
                             exitAnim.setDuration(exitAnimDuration);
@@ -655,8 +673,9 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                             }
                         }, exitAnimDuration == -1 ? exitAnim.getDuration() : exitAnimDuration);
                     }
-                });
+                };
             }
+            return dialogXAnimImpl;
         }
     }
     
@@ -1135,4 +1154,13 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
     public float getRadius() {
         return backgroundRadius;
     }
+    
+    public DialogXAnimInterface<PopTip> getDialogXAnimImpl() {
+        return dialogXAnimImpl;
+    }
+    
+    public PopTip setDialogXAnimImpl(DialogXAnimInterface<PopTip> dialogXAnimImpl) {
+        this.dialogXAnimImpl = dialogXAnimImpl;
+        return this;
+    }
 }

+ 6 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/TipDialog.java

@@ -3,6 +3,7 @@ package com.kongzue.dialogx.dialogs;
 import android.app.Activity;
 
 import com.kongzue.dialogx.DialogX;
+import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
 
 /**
@@ -191,4 +192,9 @@ public class TipDialog extends WaitDialog {
     public float getRadius() {
         return backgroundRadius;
     }
+    
+    public TipDialog setDialogXAnimImpl(DialogXAnimInterface<WaitDialog> dialogXAnimImpl) {
+        this.dialogXAnimImpl = dialogXAnimImpl;
+        return this;
+    }
 }

+ 80 - 44
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -26,11 +26,13 @@ import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
+import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
 import com.kongzue.dialogx.interfaces.DialogXStyle;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.ProgressViewInterface;
+import com.kongzue.dialogx.util.ObjectRunnable;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.BlurView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
@@ -58,6 +60,7 @@ public class WaitDialog extends BaseDialog {
     protected int customEnterAnimResId;
     protected int customExitAnimResId;
     protected float backgroundRadius = -1;
+    protected DialogXAnimInterface<WaitDialog> dialogXAnimImpl;
     
     public enum TYPE {
         /**
@@ -333,41 +336,14 @@ public class WaitDialog extends BaseDialog {
                         @Override
                         public void run() {
                             if (getTopActivity() == null) return;
-                            int enterAnimResId = R.anim.anim_dialogx_default_enter;
-                            if (overrideEnterAnimRes != 0) {
-                                enterAnimResId = overrideEnterAnimRes;
-                            }
-                            if (customEnterAnimResId != 0) {
-                                enterAnimResId = customEnterAnimResId;
-                            }
-                            Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId);
-                            long enterAnimDurationTemp = enterAnim.getDuration();
-                            enterAnim.setInterpolator(new DecelerateInterpolator());
-                            if (overrideEnterDuration >= 0) {
-                                enterAnimDurationTemp = overrideEnterDuration;
-                            }
-                            if (enterAnimDuration >= 0) {
-                                enterAnimDurationTemp = enterAnimDuration;
-                            }
-                            enterAnim.setDuration(enterAnimDurationTemp);
-                            bkg.startAnimation(enterAnim);
                             
-                            ValueAnimator bkgAlpha = ValueAnimator.ofFloat(0f, 1f);
-                            bkgAlpha.setDuration(enterAnimDurationTemp);
-                            bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                            getDialogXAnimImpl().doShowAnim(WaitDialog.this, new ObjectRunnable<Float>() {
                                 @Override
-                                public void onAnimationUpdate(ValueAnimator animation) {
-                                    float value = (float) animation.getAnimatedValue();
+                                public void run(Float value) {
                                     boxRoot.setBkgAlpha(value);
                                 }
                             });
-                            bkgAlpha.start();
                             
-                            boxRoot.animate()
-                                    .setDuration(enterAnimDurationTemp)
-                                    .alpha(1f)
-                                    .setInterpolator(new DecelerateInterpolator())
-                                    .setListener(null);
                             onDialogShow();
                             getDialogLifecycleCallback().onShow(me());
                         }
@@ -519,12 +495,73 @@ public class WaitDialog extends BaseDialog {
                 boxRoot.post(new Runnable() {
                     @Override
                     public void run() {
+                        if (v != null) v.setEnabled(false);
+                        getDialogXAnimImpl().doExitAnim(WaitDialog.this, new ObjectRunnable<Float>() {
+                            @Override
+                            public void run(Float value) {
+                                if (boxRoot != null) {
+                                    boxRoot.setBkgAlpha(value);
+                                }
+                                if (value == 0f) {
+                                    if (boxRoot != null) {
+                                        boxRoot.setVisibility(View.GONE);
+                                    }
+                                    dismiss(getWaitDialogView());
+                                }
+                            }
+                        });
+                    }
+                });
+            }
+        }
+        
+        protected DialogXAnimInterface<WaitDialog> getDialogXAnimImpl() {
+            if (dialogXAnimImpl == null) {
+                dialogXAnimImpl = new DialogXAnimInterface<WaitDialog>() {
+                    @Override
+                    public void doShowAnim(WaitDialog dialog, ObjectRunnable<Float> animProgress) {
+                        int enterAnimResId = R.anim.anim_dialogx_default_enter;
+                        if (overrideEnterAnimRes != 0) {
+                            enterAnimResId = overrideEnterAnimRes;
+                        }
+                        if (customEnterAnimResId != 0) {
+                            enterAnimResId = customEnterAnimResId;
+                        }
+                        Animation enterAnim = AnimationUtils.loadAnimation(getTopActivity(), enterAnimResId);
+                        long enterAnimDurationTemp = enterAnim.getDuration();
+                        enterAnim.setInterpolator(new DecelerateInterpolator());
+                        if (overrideEnterDuration >= 0) {
+                            enterAnimDurationTemp = overrideEnterDuration;
+                        }
+                        if (enterAnimDuration >= 0) {
+                            enterAnimDurationTemp = enterAnimDuration;
+                        }
+                        enterAnim.setDuration(enterAnimDurationTemp);
+                        bkg.startAnimation(enterAnim);
+                        
+                        ValueAnimator bkgAlpha = ValueAnimator.ofFloat(0f, 1f);
+                        bkgAlpha.setDuration(enterAnimDurationTemp);
+                        bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                            @Override
+                            public void onAnimationUpdate(ValueAnimator animation) {
+                                animProgress.run((Float) animation.getAnimatedValue());
+                            }
+                        });
+                        bkgAlpha.start();
+                        
+                        boxRoot.animate()
+                                .setDuration(enterAnimDurationTemp)
+                                .alpha(1f)
+                                .setInterpolator(new DecelerateInterpolator())
+                                .setListener(null);
+                    }
+                    
+                    @Override
+                    public void doExitAnim(WaitDialog dialog, ObjectRunnable<Float> animProgress) {
                         Context context = getTopActivity();
                         if (context == null) context = boxRoot.getContext();
                         if (context == null) return;
                         
-                        if (v != null) v.setEnabled(false);
-                        
                         int exitAnimResId = R.anim.anim_dialogx_default_exit;
                         if (overrideExitAnimRes != 0) {
                             exitAnimResId = overrideExitAnimRes;
@@ -554,24 +591,14 @@ public class WaitDialog extends BaseDialog {
                         bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                             @Override
                             public void onAnimationUpdate(ValueAnimator animation) {
-                                if (boxRoot != null) {
-                                    float value = (float) animation.getAnimatedValue();
-                                    boxRoot.setBkgAlpha(value);
-                                    if (value == 0) boxRoot.setVisibility(View.GONE);
-                                }
+                                animProgress.run((Float) animation.getAnimatedValue());
                             }
                         });
                         bkgAlpha.start();
-                        
-                        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                dismiss(getWaitDialogView());
-                            }
-                        }, exitAnimDurationTemp);
                     }
-                });
+                };
             }
+            return dialogXAnimImpl;
         }
         
         public void showTip(final TYPE tip) {
@@ -1062,4 +1089,13 @@ public class WaitDialog extends BaseDialog {
     public float getRadius() {
         return backgroundRadius;
     }
+    
+    public DialogXAnimInterface<WaitDialog> getDialogXAnimImpl() {
+        return dialogXAnimImpl;
+    }
+    
+    public WaitDialog setDialogXAnimImpl(DialogXAnimInterface<WaitDialog> dialogXAnimImpl) {
+        this.dialogXAnimImpl = dialogXAnimImpl;
+        return this;
+    }
 }

+ 1 - 1
gradle.properties

@@ -19,5 +19,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.46.beta10
+BUILD_VERSION=0.0.46.beta12
 BUILD_VERSION_INT=45