Repository: incubator-weex Updated Branches: refs/heads/0.12-dev 02487c9c8 -> 476e58c9a
* [Android] Add the ability of disable changing layerType For certain custom weex instance, one can disable the ability of changing layerType by call WXSDKInstance.enableLayerType(boolean). The default value for this flag is true and setting this to false will have performance punishment Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/8e51cef1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8e51cef1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8e51cef1 Branch: refs/heads/0.12-dev Commit: 8e51cef1b0e4de454c7920632e0d64b60e8fa6d4 Parents: a6207a6 Author: YorkShen <shenyua...@gmail.com> Authored: Wed Mar 22 11:45:55 2017 +0800 Committer: YorkShen <shenyua...@gmail.com> Committed: Wed Mar 22 11:45:55 2017 +0800 ---------------------------------------------------------------------- .../java/com/taobao/weex/WXSDKInstance.java | 25 ++++++++++++++++++++ .../taobao/weex/dom/action/AnimationAction.java | 3 ++- .../taobao/weex/ui/component/WXComponent.java | 15 ++++++++---- 3 files changed, 38 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java index eb0653f..51903ea 100755 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -208,6 +208,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; +import android.graphics.Paint; import android.net.Uri; import android.os.Message; import android.support.annotation.Nullable; @@ -293,6 +294,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. private boolean isCommit=false; private WXGlobalEventReceiver mGlobalEventReceiver=null; private boolean trackComponent; + private boolean enableLayerType = true; private boolean mNeedValidate = false; private static volatile int mViewPortWidth = 750; private int mInstanceViewPortWidth = 750; @@ -340,6 +342,29 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. this.trackComponent = trackComponent; } + /** + * Tell whether it is enabled to change the layerType + * {@link android.view.View#setLayerType(int, Paint)} + * @return True for enable to change the layerType of component, false otherwise. The default + * is True + */ + public boolean isLayerTypeEnabled() { + return enableLayerType; + } + + /** + * Enable the ability of changing layerType. e.g. {@link android.view.View#setLayerType(int, Paint)} + * Disable the ability of changing layerType will have tremendous <strong>performance + * punishment</strong>. + * + * <strong>Do not</strong> set this to false unless you know exactly what you are doing. + * @param enable True for enable to change the layerType of component, false otherwise. The default + * is True + */ + public void enableLayerType(boolean enable) { + enableLayerType = enable; + } + public boolean isNeedValidate() { return mNeedValidate; } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java index 9768016..d85d997 100644 --- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java +++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java @@ -328,7 +328,8 @@ class AnimationAction implements DOMAction, RenderAction { .getInstanceViewPortWidth()); if (animator != null) { Animator.AnimatorListener animatorCallback = createAnimatorListener(instance, callback); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 && component + .enableLayerType() ) { component.getHostView().setLayerType(View.LAYER_TYPE_HARDWARE, null); } Interpolator interpolator = createTimeInterpolator(); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index fcf7aa4..c1c99bc 100755 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -159,7 +159,6 @@ import com.taobao.weex.common.IWXObject; import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.dom.ImmutableDomObject; import com.taobao.weex.dom.WXDomHandler; -import com.taobao.weex.dom.WXDomManager; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.dom.WXDomTask; import com.taobao.weex.dom.WXStyle; @@ -1132,7 +1131,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi } public void setOpacity(float opacity) { - if (opacity >= 0 && opacity <= 1 && mHost.getAlpha() != opacity) { + if (opacity >= 0 && opacity <= 1 && mHost.getAlpha() != opacity && enableLayerType()) { mHost.setLayerType(View.LAYER_TYPE_HARDWARE, null); mHost.setAlpha(opacity); } @@ -1320,7 +1319,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi if (WXEnvironment.isApkDebugable() && !WXUtils.isUiThread()) { throw new WXRuntimeException("[WXComponent] destroy can only be called in main thread"); } - if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE) { + if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE && enableLayerType()) { mHost.setLayerType(View.LAYER_TYPE_NONE, null); } removeAllEvent(); @@ -1506,4 +1505,12 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi public void setStickyOffset(int stickyOffset) { mStickyOffset = stickyOffset; } -} + + /** + * For now, this method respect the result of {@link WXSDKInstance#isLayerTypeEnabled()} + * @return Refer {@link WXSDKInstance#isLayerTypeEnabled()} + */ + public boolean enableLayerType() { + return getInstance().isLayerTypeEnabled(); + } +} \ No newline at end of file