Browse Source

0.0.49.beta5 ready
- ActivityScreenShotImageView 增加静态方法 useHardwareRenderingMode,开启可使用硬件加速渲染模式;
- 修复部分系统下 ActivityScreenShotImageView 在执行回收时触发的“Software rendering doesn't support hardware bitmaps.”异常;
- 其他问题修复;

0.0.49.beta4 ready
- 修复部分系统下 BlurRelativeLayout 或 BlurRelativeLayout 在执行回收时触发的“Calling RS with no Context active.”异常;
- ActivityScreenShotImageView 截图方案更新;

0.0.49.beta4 ready
- 修复在部分设备上由 DialogXBaseRelativeLayout 引发的 StackOverflowError,此问题猜测跟特定版本系统固件存在问题有关;

0.0.49.beta3
- 修复 ActivityScreenShotImageView 可能引发的“Software rendering doesn’t support hardware bitmaps” 异常;
- 修复 BottomDialog/FullScreenDialog 的滑动事件在内部存在 ScrollController 时,若触摸位置处于 ScrollController 布局外无法滑动对话框的问题;

0.0.49.beta2
- InputInfo新增方法:`getInputFilters()`、`setInputFilters(InputFilter[] inputFilters)`、`addInputFilter(InputFilter inputFilter)` 和 `removeInputFilter(InputFilter inputFilter)`(issues:332);
- 尝试性修复 DialogFragment 模式实现下的 WaitDialog 内存泄漏问题(issues:334);
- 修复关于DialogFragmentImpl引发的空指针问题此问题(issues:335);

0.0.49.beta1
- 修复 BlurRelativeLayout 和 BlurLinearLayout 在 iOS 主题下使用 DialogFragment 模式时存在的渲染宽度和高度 <=0 导致的异常(issues:324);
- 修复 IOS 主题下可能存在的 `RSInvalidStateException: Calling RS with no Context active` 异常问题(issues:327);
- 修复可能存在的高频启关对话框过程中,因UI未完成构建被关闭引发的空指针异常(issues:331);

Kongzue 1 năm trước cách đây
mục cha
commit
e82ca77ec0

+ 6 - 3
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -605,6 +605,9 @@ public abstract class BaseDialog implements LifecycleOwner {
     }
 
     public Resources getResources() {
+        if (getOwnActivity() != null) {
+            return getOwnActivity().getResources();
+        }
         if (getApplicationContext() == null) {
             return Resources.getSystem();
         }
@@ -808,7 +811,7 @@ public abstract class BaseDialog implements LifecycleOwner {
                     for (BaseDialog baseDialog : copyOnWriteList) {
                         if (baseDialog.getOwnActivity() == activity && baseDialog.dialogView != null) {
                             WindowUtil.dismiss(baseDialog.dialogView.get());
-                            if (baseDialog instanceof WaitDialog){
+                            if (baseDialog instanceof WaitDialog) {
                                 ((WaitDialog) baseDialog).cleanInstance();
                             }
                             runningDialogList.remove(baseDialog);
@@ -822,7 +825,7 @@ public abstract class BaseDialog implements LifecycleOwner {
                     for (BaseDialog baseDialog : copyOnWriteList) {
                         if (baseDialog.getOwnActivity() == activity && baseDialog.ownDialogFragmentImpl != null && baseDialog.ownDialogFragmentImpl.get() != null) {
                             baseDialog.ownDialogFragmentImpl.get().dismiss();
-                            if (baseDialog instanceof WaitDialog){
+                            if (baseDialog instanceof WaitDialog) {
                                 ((WaitDialog) baseDialog).cleanInstance();
                             }
                             runningDialogList.remove(baseDialog);
@@ -840,7 +843,7 @@ public abstract class BaseDialog implements LifecycleOwner {
                         if (baseDialog.getOwnActivity() == activity) {
                             baseDialog.cleanActivityContext();
                             runningDialogList.remove(baseDialog);
-                            if (baseDialog instanceof WaitDialog){
+                            if (baseDialog instanceof WaitDialog) {
                                 ((WaitDialog) baseDialog).cleanInstance();
                             }
                         }

+ 8 - 4
DialogX/src/main/java/com/kongzue/dialogx/util/views/ActivityScreenShotImageView.java

@@ -15,6 +15,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.impl.ActivityLifecycleImpl;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.util.DialogXFloatingWindowActivity;
@@ -33,6 +34,7 @@ import java.util.Objects;
 public class ActivityScreenShotImageView extends ImageView {
 
     float width, height, mRadius;
+    public static boolean useHardwareRenderingMode = false;
 
     public ActivityScreenShotImageView(Context context) {
         super(context);
@@ -50,9 +52,7 @@ public class ActivityScreenShotImageView extends ImageView {
     }
 
     private void init(AttributeSet attrs) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            setLayerType(LAYER_TYPE_HARDWARE, null);
-        }
+        setLayerType(useHardwareRenderingMode ? LAYER_TYPE_HARDWARE : LAYER_TYPE_SOFTWARE, null);
     }
 
     public void setRadius(float mRadius) {
@@ -160,7 +160,11 @@ public class ActivityScreenShotImageView extends ImageView {
         int viewHeight = view.getHeight();
         Bitmap bitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
         Canvas canvas = new Canvas(bitmap);
-        view.draw(canvas);
+        try {
+            view.draw(canvas);
+        } catch (Exception e) {
+            if (DialogX.DEBUGMODE) e.printStackTrace();
+        }
         setImageBitmap(Bitmap.createBitmap(bitmap, 0, 0, view.getWidth(), view.getHeight()));
         isScreenshotSuccess = true;
         setContentViewVisibility(false);

+ 1 - 1
app/release/output-metadata.json

@@ -12,7 +12,7 @@
       "filters": [],
       "attributes": [],
       "versionCode": 48,
-      "versionName": "0.0.48",
+      "versionName": "0.0.49.beta4",
       "outputFile": "app-release.apk"
     }
   ],

+ 1 - 1
gradle.properties

@@ -19,7 +19,7 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.49.beta4
+BUILD_VERSION=0.0.49.beta5
 BUILD_VERSION_INT=48
 DIALOGX_STYLE_VERSION=5
 android.nonTransitiveRClass=true