浏览代码

0.0.47.beta12

kongzue 2 年之前
父节点
当前提交
d5b3dfd218

+ 7 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -28,6 +28,7 @@ import androidx.lifecycle.Lifecycle;
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
+import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
@@ -632,6 +633,12 @@ public class BottomDialog extends BaseDialog {
         
         public void preDismiss() {
             if (isCancelable()) {
+                if (getDialogLifecycleCallback() instanceof BottomDialogSlideEventLifecycleCallback) {
+                    if (!((BottomDialogSlideEventLifecycleCallback) getDialogLifecycleCallback()).onSlideClose(me)) {
+                        doDismiss(boxRoot);
+                    }
+                    return;
+                }
                 doDismiss(boxRoot);
             } else {
                 long exitAnimDurationTemp = 300;

+ 28 - 16
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -56,6 +56,7 @@ public class BottomMenu extends BottomDialog {
     protected int selectionIndex = -1;
     protected SELECT_MODE selectMode = SELECT_MODE.NONE;
     protected ArrayList<Integer> selectionItems;
+    protected boolean showSelectedBackgroundTips = true;
     
     protected OnMenuItemClickListener<BottomMenu> onMenuItemClickListener;
     
@@ -601,24 +602,26 @@ public class BottomMenu extends BottomDialog {
             refreshUI();
             
             //部分主题下选中项默认按下效果
-            listView.post(new Runnable() {
-                @Override
-                public void run() {
-                    if (menuListAdapter instanceof BottomMenuArrayAdapter) {
-                        BottomMenuArrayAdapter bottomMenuArrayAdapter = ((BottomMenuArrayAdapter) menuListAdapter);
-                        
-                        View selectItemView = listView.getChildAt(getSelection());
-                        if (selectItemView != null) {
-                            selectItemView.post(new Runnable() {
-                                @Override
-                                public void run() {
-                                    selectItemView.setPressed(true);
-                                }
-                            });
+            if (showSelectedBackgroundTips) {
+                listView.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        if (menuListAdapter instanceof BottomMenuArrayAdapter && showSelectedBackgroundTips) {
+                            BottomMenuArrayAdapter bottomMenuArrayAdapter = ((BottomMenuArrayAdapter) menuListAdapter);
+                
+                            View selectItemView = listView.getChildAt(getSelection());
+                            if (selectItemView != null) {
+                                selectItemView.post(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        selectItemView.setPressed(true);
+                                    }
+                                });
+                            }
                         }
                     }
-                }
-            });
+                });
+            }
             
         }
     }
@@ -1210,4 +1213,13 @@ public class BottomMenu extends BottomDialog {
         refreshUI();
         return this;
     }
+    
+    public boolean isShowSelectedBackgroundTips() {
+        return showSelectedBackgroundTips;
+    }
+    
+    public BottomMenu setShowSelectedBackgroundTips(boolean showSelectedBackgroundTips) {
+        this.showSelectedBackgroundTips = showSelectedBackgroundTips;
+        return this;
+    }
 }

+ 22 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BottomDialogSlideEventLifecycleCallback.java

@@ -0,0 +1,22 @@
+package com.kongzue.dialogx.interfaces;
+
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * @author: Kongzue
+ * @github: https://github.com/kongzue/
+ * @homepage: http://kongzue.com/
+ * @mail: myzcxhh@live.cn
+ * @createTime: 2022/12/11 17:39
+ */
+public abstract class BottomDialogSlideEventLifecycleCallback<D extends BaseDialog> extends DialogLifecycleCallback<D> {
+    
+    public boolean onSlideClose(D dialog) {
+        return false;
+    }
+    
+    public boolean onSlideTouchEvent(D dialog, View v, MotionEvent event) {
+        return false;
+    }
+}

+ 7 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/BottomDialogTouchEventInterceptor.java

@@ -7,6 +7,7 @@ import android.view.View;
 
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.dialogs.BottomDialog;
+import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
 import com.kongzue.dialogx.interfaces.ScrollController;
 
 /**
@@ -61,6 +62,11 @@ public class BottomDialogTouchEventInterceptor {
             impl.bkg.setOnTouchListener(new View.OnTouchListener() {
                 @Override
                 public boolean onTouch(View v, MotionEvent event) {
+                    if (me.getDialogLifecycleCallback() instanceof BottomDialogSlideEventLifecycleCallback) {
+                        if (((BottomDialogSlideEventLifecycleCallback) me.getDialogLifecycleCallback()).onSlideTouchEvent(me, v, event)) {
+                            return true;
+                        }
+                    }
                     //这里 return 什么实际上无关紧要,重点在于 MaxRelativeLayout.java(dispatchTouchEvent:184) 的事件分发会独立触发此处的额外滑动事件
                     switch (event.getAction()) {
                         case MotionEvent.ACTION_DOWN:
@@ -106,7 +112,7 @@ public class BottomDialogTouchEventInterceptor {
                                     impl.preDismiss();
                                 } else if (impl.boxBkg.getY() != bkgOldY) {
                                     ObjectAnimator enterAnim = ObjectAnimator.ofFloat(impl.boxBkg, "y", impl.boxBkg.getY(),
-                                             impl.bkgEnterAimY);
+                                            impl.bkgEnterAimY);
                                     enterAnim.setDuration(300);
                                     enterAnim.start();
                                 }

+ 16 - 1
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -16,6 +16,7 @@ import android.provider.Settings;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.Gravity;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
@@ -64,6 +65,7 @@ import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.dialogs.TipDialog;
 import com.kongzue.dialogx.dialogs.WaitDialog;
 import com.kongzue.dialogx.interfaces.BaseDialog;
+import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
 import com.kongzue.dialogx.interfaces.DialogXStyle;
@@ -511,7 +513,7 @@ public class MainActivity extends BaseActivity {
             @Override
             public void onClick(View v) {
                 closeFlag = false;
-                WaitDialog.show("Please Wait!Please Wait!Please Wait!").setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
+                WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
                     @Override
                     public boolean onBackPressed(WaitDialog dialog) {
                         PopTip.show("按下返回", "关闭").setButton(new OnDialogButtonClickListener<PopTip>() {
@@ -621,6 +623,19 @@ public class MainActivity extends BaseActivity {
                                 });
                             }
                         })
+                        .setDialogLifecycleCallback(new BottomDialogSlideEventLifecycleCallback<BottomDialog>() {
+                            @Override
+                            public boolean onSlideClose(BottomDialog dialog) {
+                                log("#onSlideClose");
+                                return super.onSlideClose(dialog);
+                            }
+    
+                            @Override
+                            public boolean onSlideTouchEvent(BottomDialog dialog, View v, MotionEvent event) {
+                                log("#onSlideTouchEvent: action="+ event.getAction() + " y="+event.getY());
+                                return super.onSlideTouchEvent(dialog, v, event);
+                            }
+                        })
                         .show();
             }
         });

+ 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.47.beta11
+BUILD_VERSION=0.0.47.beta12
 BUILD_VERSION_INT=46