1
0
Эх сурвалжийг харах

update 0.0.13 ver.
- Fix the bug that the BottomDialog occasionally fails to click.

kongzue 4 жил өмнө
parent
commit
0f32b2cadf

+ 3 - 3
DialogX/build.gradle

@@ -6,7 +6,7 @@ def siteUrl = 'https://github.com/kongzue/DialogX' //项目在github主页地址
 def gitUrl = 'https://github.com/kongzue/DialogX.git'   //Git仓库的地址
 
 group = "com.kongzue.dialogx"
-version = "0.0.12"
+version = "0.0.13"
 
 android {
     compileSdkVersion 30
@@ -14,8 +14,8 @@ android {
     defaultConfig {
         minSdkVersion 21
         targetSdkVersion 30
-        versionCode 12
-        versionName "0.0.12"
+        versionCode 13
+        versionName "0.0.13"
 
         consumerProguardFiles "consumer-rules.pro"
 

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

@@ -34,6 +34,7 @@ import com.kongzue.dialogx.style.MaterialStyle;
 import com.kongzue.dialogx.util.BottomDialogTouchEventInterceptor;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.BlurView;
+import com.kongzue.dialogx.util.views.BottomDialogScrollView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 import com.kongzue.dialogx.util.views.MaxRelativeLayout;
 

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

@@ -473,7 +473,7 @@ public class BottomMenu extends BottomDialog {
                 dividerDrawableResId = isLightTheme() ? R.drawable.rect_dialogx_material_menu_split_divider : R.drawable.rect_dialogx_material_menu_split_divider_night;
             }
             
-            listView = new BottomDialogListView(getContext());
+            listView = new BottomDialogListView(dialog,getContext());
             listView.setOverScrollMode(OVER_SCROLL_NEVER);
             listView.setDivider(getResources().getDrawable(dividerDrawableResId));
             listView.setDividerHeight(dividerHeight);

+ 21 - 28
DialogX/src/main/java/com/kongzue/dialogx/util/BottomDialogTouchEventInterceptor.java

@@ -9,6 +9,7 @@ import android.view.animation.DecelerateInterpolator;
 
 import com.kongzue.dialogx.dialogs.BottomDialog;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
+import com.kongzue.dialogx.util.views.BottomDialogScrollView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 
 /**
@@ -60,7 +61,7 @@ public class BottomDialogTouchEventInterceptor {
          * }
          */
         if (me.isAllowInterceptTouch()) {
-            impl.bkg.setTouchCallBack(new View.OnTouchListener() {
+            impl.bkg.setOnTouchListener(new View.OnTouchListener() {
                 @Override
                 public boolean onTouch(View v, MotionEvent event) {
                     switch (event.getAction()) {
@@ -68,42 +69,34 @@ public class BottomDialogTouchEventInterceptor {
                             bkgTouchDownY = event.getY();
                             isBkgTouched = true;
                             bkgOldY = impl.bkg.getY();
-                            
-                            return false;
+                            break;
                         case MotionEvent.ACTION_MOVE:
                             if (isBkgTouched) {
                                 float aimY = impl.bkg.getY() + event.getY() - bkgTouchDownY;
-                                if (aimY < 0 || impl.scrollView.getScrollY() != 0) {
-                                    if (impl.bkg.isChildScrollViewCanScroll()) {
-                                        if (oldMode == 0) {
-                                            bkgTouchDownY = event.getY();
-                                            scrolledY = 0;
+                                if (impl.bkg.isChildScrollViewCanScroll()) {
+                                    if (aimY > 0) {
+                                        if (impl.scrollView.getScrollY() == 0) {
+                                            if (impl.scrollView instanceof BottomDialogScrollView) {
+                                                ((BottomDialogScrollView) impl.scrollView).lockScroll(true);
+                                            }
+                                            impl.bkg.setY(aimY);
+                                        }
+                                    } else {
+                                        if (impl.scrollView instanceof BottomDialogScrollView) {
+                                            ((BottomDialogScrollView) impl.scrollView).lockScroll(false);
                                         }
-
-                                        impl.scrollView.scrollTo(0, (int) (scrolledY - (event.getY() - bkgTouchDownY)));
                                         impl.bkg.setY(0);
-                                        oldMode = -1;
-                                        return true;
+                                        return false;
                                     }
                                 } else {
-                                    if (oldMode == -1) {
-                                        bkgTouchDownY = event.getY();
-                                        aimY = impl.bkg.getY() + event.getY() - bkgTouchDownY;
-                                    }
-
-                                    if (impl.bkg.isChildScrollViewCanScroll()) {
+                                    if (aimY > impl.bkgEnterAimY) {
                                         impl.bkg.setY(aimY);
                                     } else {
-                                        if (aimY > impl.bkgEnterAimY) {
-                                            impl.bkg.setY(aimY);
-                                        }
+                                        impl.bkg.setY(impl.bkgEnterAimY);
                                     }
-
-                                    oldMode = 0;
-                                    return true;
                                 }
                             }
-                            return false;
+                            break;
                         case MotionEvent.ACTION_UP:
                         case MotionEvent.ACTION_CANCEL:
                             scrolledY = impl.scrollView.getScrollY();
@@ -133,13 +126,13 @@ public class BottomDialogTouchEventInterceptor {
                                     enterAnim.start();
                                 }
                             }
-                            return false;
+                            break;
                     }
-                    return false;
+                    return true;
                 }
             });
         } else {
-            impl.bkg.setTouchCallBack(null);
+            impl.bkg.setOnTouchListener(null);
         }
     }
     

+ 10 - 0
DialogX/src/main/java/com/kongzue/dialogx/util/views/BottomDialogListView.java

@@ -3,6 +3,7 @@ package com.kongzue.dialogx.util.views;
 import android.content.Context;
 import android.os.Build;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -12,6 +13,8 @@ import android.widget.ScrollView;
 
 import androidx.annotation.RequiresApi;
 
+import com.kongzue.dialogx.dialogs.BottomDialog;
+
 /**
  * @author: Kongzue
  * @github: https://github.com/kongzue/
@@ -32,6 +35,13 @@ public class BottomDialogListView extends ListView {
         super(context, attrs, defStyleAttr);
     }
     
+    private BottomDialog.DialogImpl dialogImpl;
+    
+    public BottomDialogListView(BottomDialog.DialogImpl dialog, Context context) {
+        super(context);
+        dialogImpl = dialog;
+    }
+    
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);

+ 55 - 0
DialogX/src/main/java/com/kongzue/dialogx/util/views/BottomDialogScrollView.java

@@ -0,0 +1,55 @@
+package com.kongzue.dialogx.util.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.widget.ScrollView;
+
+import com.kongzue.dialogx.dialogs.BottomDialog;
+
+/**
+ * @author: Kongzue
+ * @github: https://github.com/kongzue/
+ * @homepage: http://kongzue.com/
+ * @mail: myzcxhh@live.cn
+ * @createTime: 2020/11/17 15:29
+ */
+public class BottomDialogScrollView extends ScrollView {
+    public BottomDialogScrollView(Context context) {
+        super(context);
+    }
+    
+    public BottomDialogScrollView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+    
+    public BottomDialogScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+    
+    public BottomDialogScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+    
+    private BottomDialog.DialogImpl dialogImpl;
+    
+    public BottomDialogScrollView setDialogImpl(BottomDialog.DialogImpl dialogImpl) {
+        this.dialogImpl = dialogImpl;
+        return this;
+    }
+    
+    boolean lockScroll;
+    
+    public void lockScroll(boolean lockScroll) {
+        this.lockScroll=lockScroll;
+    }
+    
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (lockScroll){
+            return false;
+        }
+        return super.onTouchEvent(ev);
+    }
+}

+ 24 - 56
DialogX/src/main/java/com/kongzue/dialogx/util/views/MaxRelativeLayout.java

@@ -120,55 +120,6 @@ public class MaxRelativeLayout extends RelativeLayout {
         childScrollView = findViewById(R.id.scrollView);
     }
     
-    private boolean isMove = false;
-    private int touchY, touchX;
-    
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent event) {
-        if (!interceptTouch) {
-            return super.onInterceptTouchEvent(event);
-        }
-        if (onTouchListener != null) {
-            return onTouchListener.onTouch(this, event);
-//            switch (event.getAction()) {
-//                case MotionEvent.ACTION_DOWN:
-//                    Log.d(">>>", "ACTION_DOWN ");
-//                    isMove = false;
-//                    break;
-//                case MotionEvent.ACTION_CANCEL:
-//                case MotionEvent.ACTION_UP:
-//                    Log.d(">>>", "ACTION_UP ");
-//                    if (!isMove) {
-//                        return false;
-//                    }
-//                    isMove = false;
-//                    break;
-//                case MotionEvent.ACTION_MOVE:
-//                    Log.d(">>>", "ACTION_MOVE ");
-//                    if (!isMove) {
-//                        touchY = (int) event.getRawY();
-//                        touchX = (int) event.getRawX();
-//                    }
-//                    isMove = true;
-//
-//                    float moveY = event.getRawY();
-//                    float moveX = event.getRawX();
-//
-//                    if (Math.abs(moveY - touchY) > dip2px(20) || Math.abs(moveX - touchX) > dip2px(20)) {
-//                        final ViewParent parent = getParent();
-//                        if (parent != null) {
-//                            parent.requestDisallowInterceptTouchEvent(true);
-//                        }
-//                        return true;
-//                    } else {
-//                        return false;
-//                    }
-//            }
-//            return isMove;
-        }
-        return super.onInterceptTouchEvent(event);
-    }
-    
     public boolean isChildScrollViewCanScroll() {
         if (childScrollView == null) return false;
         if (!childScrollView.isEnabled()) {
@@ -182,13 +133,6 @@ public class MaxRelativeLayout extends RelativeLayout {
         return false;
     }
     
-    private OnTouchListener onTouchListener;
-    
-    public void setTouchCallBack(OnTouchListener l) {
-        onTouchListener = l;
-        super.setOnTouchListener(l);
-    }
-    
     public int dip2px(float dpValue) {
         final float scale = getResources().getDisplayMetrics().density;
         return (int) (dpValue * scale + 0.5f);
@@ -228,4 +172,28 @@ public class MaxRelativeLayout extends RelativeLayout {
         super.setTranslationY(translationY);
         if (onYChangedListener != null) onYChangedListener.y(translationY);
     }
+    
+//    @Override
+//    public boolean onInterceptTouchEvent(MotionEvent ev) {
+//        if (interceptTouch && onTouchListener != null) {
+//            return onTouchListener.onTouch(this, ev);
+//        }
+//        return super.onInterceptTouchEvent(ev);
+//    }
+    
+    private OnTouchListener onTouchListener;
+    
+    @Override
+    public void setOnTouchListener(OnTouchListener l) {
+        onTouchListener = l;
+       // super.setOnTouchListener(l);
+    }
+    
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (onTouchListener!=null){
+            onTouchListener.onTouch(this,ev);
+        }
+        return super.dispatchTouchEvent(ev);
+    }
 }

+ 10 - 9
DialogX/src/main/res/layout/layout_dialogx_bottom_material.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/box_root"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -13,18 +14,18 @@
 
         <com.kongzue.dialogx.util.views.MaxRelativeLayout
             android:id="@+id/bkg"
+            android:clickable="true"
+            android:focusableInTouchMode="true"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
-            android:background="@drawable/rect_dialogx_material_bottom_bkg_light"
-            android:focusableInTouchMode="true">
+            android:background="@drawable/rect_dialogx_material_bottom_bkg_light">
 
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:paddingTop="10dp"
-                android:clickable="true"
-                android:orientation="vertical">
+                android:orientation="vertical"
+                android:paddingTop="10dp">
 
                 <ImageView
                     android:id="@+id/img_tab"
@@ -46,7 +47,7 @@
                     android:textColor="@color/black"
                     android:textSize="21dp" />
 
-                <ScrollView
+                <com.kongzue.dialogx.util.views.BottomDialogScrollView
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -74,16 +75,16 @@
                         <RelativeLayout
                             android:id="@+id/box_custom"
                             android:layout_width="match_parent"
-                            android:layout_height="wrap_content"/>
+                            android:layout_height="wrap_content" />
 
                         <RelativeLayout
                             android:id="@+id/box_list"
                             android:layout_width="match_parent"
-                            android:layout_height="wrap_content"/>
+                            android:layout_height="wrap_content" />
 
                     </LinearLayout>
 
-                </ScrollView>
+                </com.kongzue.dialogx.util.views.BottomDialogScrollView>
 
             </LinearLayout>
 

+ 2 - 2
README.md

@@ -106,7 +106,7 @@ DialogX 采用了主体分离结构,主框架仅包含 Material 设计风格
 想要在您的项目引入 DialogX,您需要在 app 的 build.gradle 文件中找到 `dependencies{}` 代码块,并在其中加入以下语句:
 
 ```
-implementation 'com.kongzue.dialogx:DialogX:0.0.11'
+implementation 'com.kongzue.dialogx:DialogX:0.0.13'
 ```
 
 若有需要,也可以手动配置 Maven:
@@ -115,7 +115,7 @@ implementation 'com.kongzue.dialogx:DialogX:0.0.11'
 <dependency>
   <groupId>com.kongzue.dialogx</groupId>
   <artifactId>DialogX</artifactId>
-  <version>0.0.11</version>
+  <version>0.0.13</version>
   <type>pom</type>
 </dependency>
 ```

+ 2 - 2
app/build.gradle

@@ -7,8 +7,8 @@ android {
         applicationId "com.kongzue.dialogxdemo"
         minSdkVersion 21
         targetSdkVersion 30
-        versionCode 1
-        versionName "1.0"
+        versionCode 13
+        versionName "0.0.13"
 
         renderscriptTargetApi 21
         renderscriptSupportModeEnabled true    // Enable RS support

+ 9 - 9
app/src/main/java/com/kongzue/dialogxdemo/MainActivity.java

@@ -228,7 +228,7 @@ public class MainActivity extends BaseActivity {
                 MessageDialog.show("标题", "正文内容", "确定").setOkButton(new OnDialogButtonClickListener<MessageDialog>() {
                     @Override
                     public boolean onClick(MessageDialog baseDialog, View v) {
-                        toast("点击确定按钮");
+                        PopTip.show("点击确定按钮");
                         return false;
                     }
                 });
@@ -255,7 +255,7 @@ public class MainActivity extends BaseActivity {
                         .setOkButton(new OnInputDialogButtonClickListener<InputDialog>() {
                             @Override
                             public boolean onClick(InputDialog baseDialog, View v, String inputStr) {
-                                toast("输入的内容:" + inputStr);
+                                PopTip.show("输入的内容:" + inputStr);
                                 return false;
                             }
                         })
@@ -269,7 +269,7 @@ public class MainActivity extends BaseActivity {
                 WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
                     @Override
                     public boolean onBackPressed() {
-                        toast("按下返回");
+                        PopTip.show("按下返回");
                         return false;
                     }
                 });
@@ -288,7 +288,7 @@ public class MainActivity extends BaseActivity {
                 WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
                     @Override
                     public boolean onBackPressed() {
-                        toast("按下返回");
+                        PopTip.show("按下返回");
                         return false;
                     }
                 });
@@ -425,7 +425,7 @@ public class MainActivity extends BaseActivity {
                             .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
                                 @Override
                                 public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                                    toast(text);
+                                    PopTip.show(text);
                                     return false;
                                 }
                             });
@@ -435,7 +435,7 @@ public class MainActivity extends BaseActivity {
                             .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
                                 @Override
                                 public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                                    toast(text);
+                                    PopTip.show(text);
                                     return false;
                                 }
                             });
@@ -455,7 +455,7 @@ public class MainActivity extends BaseActivity {
                             @Override
                             public void onClick(View v) {
                                 dialog.dismiss();
-                                toast("提交内容:\n" + editReplyCommit.getText().toString());
+                                PopTip.show("提交内容:\n" + editReplyCommit.getText().toString());
                             }
                         });
                         editReplyCommit.postDelayed(new Runnable() {
@@ -503,7 +503,7 @@ public class MainActivity extends BaseActivity {
                         .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
                             @Override
                             public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                                toast(text);
+                                PopTip.show(text);
                                 return false;
                             }
                         })
@@ -645,7 +645,7 @@ public class MainActivity extends BaseActivity {
                             @Override
                             public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
                                 selectMenuIndex = index;
-                                toast(text);
+                                PopTip.show(text);
                                 return false;
                             }
                         })