Răsfoiți Sursa

0.0.44.beta16
- 对 onBackPressedListener#onBackPressed 逻辑进行了修改,其不再受 isCancelable 影响,独立判断执行;
- BottomDialog 对子布局含有 ScrollController 的情况进行了支持,需要将子布局设置 Tag 为“ScrollController”也可以对触摸继承生效;
- FullScreenDialog 对 ScrollController 支持,且对子布局含有 ScrollController 的情况也进行了支持;

kongzue 3 ani în urmă
părinte
comite
462908dc5f

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

@@ -399,8 +399,10 @@ public class BottomDialog extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null) {
+                        if (onBackPressedListener.onBackPressed()) {
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {
@@ -564,6 +566,14 @@ public class BottomDialog extends BaseDialog {
                         ((BottomDialogScrollView) scrollView).setVerticalScrollBarEnabled(false);
                     }
                     scrollView = (ScrollController) onBindView.getCustomView();
+                } else {
+                    View scrollController = onBindView.getCustomView().findViewWithTag("ScrollController");
+                    if (scrollController instanceof ScrollController) {
+                        if (scrollView instanceof BottomDialogScrollView) {
+                            ((BottomDialogScrollView) scrollView).setVerticalScrollBarEnabled(false);
+                        }
+                        scrollView = (ScrollController) onBindView.getCustomView();
+                    }
                 }
             }
             
@@ -602,13 +612,13 @@ public class BottomDialog extends BaseDialog {
         public void doDismiss(View v) {
             if (v != null) v.setEnabled(false);
             if (getContext() == null) return;
-    
+            
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;
                 if (boxContent != null) {
                     boxContent.getViewTreeObserver().removeOnGlobalLayoutListener(onContentViewLayoutChangeListener);
                 }
-    
+                
                 long exitAnimDurationTemp = 300;
                 if (overrideExitDuration >= 0) {
                     exitAnimDurationTemp = overrideExitDuration;
@@ -616,11 +626,11 @@ public class BottomDialog extends BaseDialog {
                 if (exitAnimDuration >= 0) {
                     exitAnimDurationTemp = exitAnimDuration;
                 }
-    
+                
                 ObjectAnimator exitAnim = ObjectAnimator.ofFloat(bkg, "y", bkg.getY(), boxBkg.getHeight());
                 exitAnim.setDuration(exitAnimDurationTemp);
                 exitAnim.start();
-    
+                
                 ValueAnimator bkgAlpha = ValueAnimator.ofFloat(1f, 0f);
                 bkgAlpha.setDuration(exitAnimDurationTemp);
                 bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@@ -634,7 +644,7 @@ public class BottomDialog extends BaseDialog {
                     }
                 });
                 bkgAlpha.start();
-    
+                
                 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                     @Override
                     public void run() {

+ 4 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -146,8 +146,10 @@ public class CustomDialog extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null) {
+                        if (onBackPressedListener.onBackPressed()){
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {

+ 15 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/FullScreenDialog.java

@@ -23,8 +23,10 @@ import com.kongzue.dialogx.interfaces.DialogXStyle;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
+import com.kongzue.dialogx.interfaces.ScrollController;
 import com.kongzue.dialogx.util.FullScreenDialogTouchEventInterceptor;
 import com.kongzue.dialogx.util.views.ActivityScreenShotImageView;
+import com.kongzue.dialogx.util.views.BottomDialogScrollView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 import com.kongzue.dialogx.util.views.MaxRelativeLayout;
 
@@ -104,6 +106,7 @@ public class FullScreenDialog extends BaseDialog {
         public RelativeLayout boxBkg;
         public MaxRelativeLayout bkg;
         public RelativeLayout boxCustom;
+        public ScrollController scrollView;
         
         public DialogImpl(View convertView) {
             if (convertView == null) return;
@@ -153,8 +156,10 @@ public class FullScreenDialog extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null ) {
+                        if (onBackPressedListener.onBackPressed()){
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {
@@ -262,6 +267,14 @@ public class FullScreenDialog extends BaseDialog {
             
             if (onBindView != null) {
                 onBindView.bindParent(boxCustom, me);
+                if (onBindView.getCustomView() instanceof ScrollController) {
+                    scrollView = (ScrollController) onBindView.getCustomView();
+                } else {
+                    View scrollController = onBindView.getCustomView().findViewWithTag("ScrollController");
+                    if (scrollController instanceof ScrollController) {
+                        scrollView = (ScrollController) onBindView.getCustomView();
+                    }
+                }
             }
             
             if (hideZoomBackground) {

+ 4 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/MessageDialog.java

@@ -378,8 +378,10 @@ public class MessageDialog extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null) {
+                        if (onBackPressedListener.onBackPressed()){
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {

+ 4 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopMenu.java

@@ -270,8 +270,10 @@ public class PopMenu extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null) {
+                        if (onBackPressedListener.onBackPressed()){
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {

+ 4 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -388,8 +388,10 @@ public class WaitDialog extends BaseDialog {
             boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
                 @Override
                 public boolean onBackPressed() {
-                    if (onBackPressedListener != null && onBackPressedListener.onBackPressed()) {
-                        dismiss();
+                    if (onBackPressedListener != null) {
+                        if (onBackPressedListener.onBackPressed()) {
+                            dismiss();
+                        }
                         return false;
                     }
                     if (isCancelable()) {

+ 28 - 6
DialogX/src/main/java/com/kongzue/dialogx/util/FullScreenDialogTouchEventInterceptor.java

@@ -6,6 +6,7 @@ import android.view.MotionEvent;
 import android.view.View;
 
 import com.kongzue.dialogx.dialogs.FullScreenDialog;
+import com.kongzue.dialogx.interfaces.ScrollController;
 
 /**
  * @author: Kongzue
@@ -35,8 +36,11 @@ public class FullScreenDialogTouchEventInterceptor {
         if (me == null || impl == null || impl.bkg == null) {
             return;
         }
-        
-        impl.boxCustom.setOnTouchListener(new View.OnTouchListener() {
+        View touchView = impl.boxCustom;
+        if (impl.scrollView != null) {
+            touchView = impl.bkg;
+        }
+        touchView.setOnTouchListener(new View.OnTouchListener() {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 switch (event.getAction()) {
@@ -48,10 +52,28 @@ public class FullScreenDialogTouchEventInterceptor {
                     case MotionEvent.ACTION_MOVE:
                         if (isBkgTouched) {
                             float aimY = impl.bkg.getY() + event.getY() - bkgTouchDownY;
-                            if (aimY < 0) {
-                                aimY = 0;
+                            if (impl.scrollView != null && impl.scrollView.isCanScroll()) {
+                                if (aimY > 0) {
+                                    if (impl.scrollView.getScrollDistance() == 0) {
+                                        if (impl.scrollView instanceof ScrollController) {
+                                            ((ScrollController) impl.scrollView).lockScroll(true);
+                                        }
+                                        impl.bkg.setY(aimY);
+                                    } else {
+                                        bkgTouchDownY = event.getY();
+                                    }
+                                } else {
+                                    if (impl.scrollView instanceof ScrollController) {
+                                        ((ScrollController) impl.scrollView).lockScroll(false);
+                                    }
+                                    impl.bkg.setY(0);
+                                }
+                            } else {
+                                if (aimY < 0) {
+                                    aimY = 0;
+                                }
+                                impl.bkg.setY(aimY);
                             }
-                            impl.bkg.setY(aimY);
                         }
                         break;
                     case MotionEvent.ACTION_UP:
@@ -84,7 +106,7 @@ public class FullScreenDialogTouchEventInterceptor {
                         }
                         break;
                 }
-                return true;
+                return false;
             }
         });
     }

+ 1 - 0
app/src/main/res/layout/layout_custom_recycleview.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <com.kongzue.dialogxdemo.custom.recycleview.CustomRecycleView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/recycleView"
+    android:tag="ScrollController"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

+ 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.44.beta14
+BUILD_VERSION=0.0.44.beta16
 BUILD_VERSION_INT=43