Repository: incubator-weex Updated Branches: refs/heads/master 556cc0683 -> ebd058eb1
* [android] fix flicker caused by coexistence of box-shadow and border-radius Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e777ac8d Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e777ac8d Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e777ac8d Branch: refs/heads/master Commit: e777ac8dd8f02805c5adee19364d87ee5c40bf9d Parents: 045e838 Author: misakuo <misa...@apache.org> Authored: Tue Oct 10 18:20:24 2017 +0800 Committer: misakuo <misa...@apache.org> Committed: Tue Oct 10 18:20:24 2017 +0800 ---------------------------------------------------------------------- .../taobao/weex/ui/component/WXComponent.java | 25 +++++++------------- .../taobao/weex/ui/component/WXVContainer.java | 25 +++++++++++++++++++- 2 files changed, 33 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e777ac8d/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 d801290..74e4db4 100644 --- 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 @@ -759,22 +759,9 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi case Constants.Name.BORDER_TOP_RIGHT_RADIUS: case Constants.Name.BORDER_BOTTOM_RIGHT_RADIUS: case Constants.Name.BORDER_BOTTOM_LEFT_RADIUS: - final Float radius = WXUtils.getFloat(param,null); - final String finalKey = key; + Float radius = WXUtils.getFloat(param,null); if (radius != null) { - if (this instanceof WXDiv && mHost != null) { - /* Hacked by moxun - Set border radius on ViewGroup will cause the Overlay to be cut and don't know why - Delay setting border radius can avoid the problem, and don't know why too, dog scienceâ¦â¦ */ - mHost.postDelayed(new Runnable() { - @Override - public void run() { - setBorderRadius(finalKey, radius); - } - }, 64); - } else { - setBorderRadius(finalKey, radius); - } + setBorderRadius(key, radius); } return true; case Constants.Name.BORDER_WIDTH: @@ -898,7 +885,13 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi } } } - BoxShadowUtil.setBoxShadow(mHost, boxShadow.toString(), radii, getInstance().getInstanceViewPortWidth()); + + View target = mHost; + if (this instanceof WXVContainer) { + target = ((WXVContainer) this).getBoxShadowHost(); + } + + BoxShadowUtil.setBoxShadow(target, boxShadow.toString(), radii, getInstance().getInstanceViewPortWidth()); } else { WXLogUtils.w("Can not resolve styles"); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e777ac8d/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java index 43b45a7..4570729 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java @@ -18,15 +18,19 @@ */ package com.taobao.weex.ui.component; +import android.content.Context; import android.content.Intent; -import android.util.Pair; import android.support.annotation.Nullable; +import android.util.Pair; import android.view.Menu; import android.view.View; import android.view.ViewGroup; + import com.taobao.weex.WXSDKInstance; import com.taobao.weex.common.Constants; import com.taobao.weex.dom.WXDomObject; +import com.taobao.weex.utils.WXViewUtils; + import java.util.ArrayList; /** @@ -36,6 +40,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> { private static final String TAG="WXVContainer"; protected ArrayList<WXComponent> mChildren = new ArrayList<>(); + private BoxShadowHost mBoxShadowHost; @Deprecated public WXVContainer(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) { @@ -474,4 +479,22 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> { /******************************** * end hook Activity life cycle callback ********************************************************/ + + public @Nullable View getBoxShadowHost() { + if (mBoxShadowHost == null) { + mBoxShadowHost = new BoxShadowHost(getContext()); + WXViewUtils.setBackGround(mBoxShadowHost, null); + mBoxShadowHost.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + getHostView().addView(mBoxShadowHost); + } + getHostView().removeView(mBoxShadowHost); + getHostView().addView(mBoxShadowHost); + return mBoxShadowHost; + } + + private class BoxShadowHost extends View { + public BoxShadowHost(Context context) { + super(context); + } + } }