Pārlūkot izejas kodu

0.0.50.beta34.pre
- Lifecycle.State.DESTROYED 时机调整到销毁 dialogImpl 之前;
- CustomDialog 中监听 baseView 位置变化的 OnDrawListener 修改为 OnPreDrawListener 以解决部分系统存在的兼容性问题;

Kongzue 1 mēnesi atpakaļ
vecāks
revīzija
bc2cc3f83b

+ 6 - 5
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -157,7 +157,7 @@ public class CustomDialog extends BaseDialog {
     }
 
     private ViewTreeObserver viewTreeObserver;
-    private ViewTreeObserver.OnDrawListener baseViewDrawListener;
+    private ViewTreeObserver.OnPreDrawListener baseViewDrawListener;
 
     public class DialogImpl implements DialogConvertViewInterface {
 
@@ -311,9 +311,9 @@ public class CustomDialog extends BaseDialog {
                     };
 
                     viewTreeObserver = boxCustom.getViewTreeObserver();
-                    viewTreeObserver.addOnDrawListener(baseViewDrawListener = new ViewTreeObserver.OnDrawListener() {
+                    viewTreeObserver.addOnPreDrawListener(baseViewDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                         @Override
-                        public void onDraw() {
+                        public boolean onPreDraw() {
                             int[] baseViewLocCache = new int[2];
                             if (baseView() != null) {
                                 baseView().getLocationInWindow(baseViewLocCache);
@@ -331,6 +331,7 @@ public class CustomDialog extends BaseDialog {
                                 viewTreeObserver = null;
                                 baseViewDrawListener = null;
                             }
+                            return true;
                         }
                     });
                     initSetCustomViewLayoutListener = true;
@@ -570,12 +571,12 @@ public class CustomDialog extends BaseDialog {
         }
     }
 
-    private void removeDrawListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnDrawListener listener) {
+    private void removeDrawListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnPreDrawListener listener) {
         if (viewTreeObserver == null || listener == null || !viewTreeObserver.isAlive()) {
             return;
         }
         try {
-            viewTreeObserver.removeOnDrawListener(listener);
+            viewTreeObserver.removeOnPreDrawListener(listener);
         } catch (Exception e) {
         }
     }