Repository: incubator-weex Updated Branches: refs/heads/0.14-dev bd00ba86b -> cd911636d
* [Android] Support rotateX and rotateY, optimize animation as well. @notdanger * [Use LayoutParamsProperty instead of DimensionUpdateListener to achieve height/width animation.](http://dotwe.org/vue/c7a70462a136b61e11ab37f384862003) * [Support rotateX and rotateY.](http://dotwe.org/vue/e712dd2ad4df470bab940d8e0e6d052d). * Stop remove transform and transform-origin from WXStyle in UpdateStyleAction. * Stop execute animation callback if corresponding WXInstance is destroyed when animation finished. Corresponding [JIRA issue](https://issues.apache.org/jira/browse/WEEX-38). Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/cd911636 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/cd911636 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/cd911636 Branch: refs/heads/0.14-dev Commit: cd911636d6ca25d12470a9c492bdfb5beb7e169d Parents: bd00ba8 Author: YorkShen <shenyua...@gmail.com> Authored: Mon Jun 5 14:59:31 2017 +0800 Committer: YorkShen <shenyua...@gmail.com> Committed: Thu Jun 8 17:02:42 2017 +0800 ---------------------------------------------------------------------- .../taobao/weex/dom/action/AnimationAction.java | 37 ++++---- .../weex/dom/action/UpdateStyleAction.java | 4 +- .../ui/animation/DimensionUpdateListener.java | 88 -------------------- .../weex/ui/animation/HeightProperty.java | 35 ++++++++ .../weex/ui/animation/LayoutParamsProperty.java | 64 ++++++++++++++ .../weex/ui/animation/WXAnimationBean.java | 72 ++++++++++------ .../taobao/weex/ui/animation/WidthProperty.java | 35 ++++++++ .../taobao/weex/ui/component/WXComponent.java | 16 +++- 8 files changed, 213 insertions(+), 138 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/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 6f811fd..59afbca 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 @@ -38,7 +38,6 @@ import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; - import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; @@ -48,9 +47,10 @@ import com.taobao.weex.dom.RenderAction; import com.taobao.weex.dom.RenderActionContext; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.ui.animation.BackgroundColorProperty; -import com.taobao.weex.ui.animation.DimensionUpdateListener; +import com.taobao.weex.ui.animation.HeightProperty; import com.taobao.weex.ui.animation.WXAnimationBean; import com.taobao.weex.ui.animation.WXAnimationModule; +import com.taobao.weex.ui.animation.WidthProperty; import com.taobao.weex.ui.component.WXComponent; import com.taobao.weex.ui.view.border.BorderDrawable; import com.taobao.weex.utils.SingleFunctionParser; @@ -58,7 +58,6 @@ import com.taobao.weex.utils.WXLogUtils; import com.taobao.weex.utils.WXResourceUtils; import com.taobao.weex.utils.WXUtils; import com.taobao.weex.utils.WXViewUtils; - import java.util.HashMap; import java.util.List; @@ -190,28 +189,28 @@ class AnimationAction implements DOMAction, RenderAction { WXResourceUtils.getColor(style.backgroundColor))); } } - if (style.getPivot() != null) { - Pair<Float, Float> pair = style.getPivot(); - target.setPivotX(pair.first); - target.setPivotY(pair.second); - } - animator = ObjectAnimator.ofPropertyValuesHolder( - target, holders.toArray(new PropertyValuesHolder[holders.size()])); - animator.setStartDelay(mAnimationBean.delay); + if (target.getLayoutParams() != null && (!TextUtils.isEmpty(style.width) || !TextUtils.isEmpty(style.height))) { - DimensionUpdateListener listener = new DimensionUpdateListener(target); ViewGroup.LayoutParams layoutParams = target.getLayoutParams(); if (!TextUtils.isEmpty(style.width)) { - listener.setWidth(layoutParams.width, - (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.width), viewPortWidth)); + holders.add(PropertyValuesHolder.ofInt(new WidthProperty(), layoutParams.width, + (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.width), viewPortWidth))); } if (!TextUtils.isEmpty(style.height)) { - listener.setHeight(layoutParams.height, - (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.height), viewPortWidth)); + holders.add(PropertyValuesHolder.ofInt(new HeightProperty(), layoutParams.height, + (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.height), viewPortWidth))); } - animator.addUpdateListener(listener); } + + if (style.getPivot() != null) { + Pair<Float, Float> pair = style.getPivot(); + target.setPivotX(pair.first); + target.setPivotY(pair.second); + } + animator = ObjectAnimator.ofPropertyValuesHolder( + target, holders.toArray(new PropertyValuesHolder[holders.size()])); + animator.setStartDelay(mAnimationBean.delay); return animator; } else { return null; @@ -225,8 +224,8 @@ class AnimationAction implements DOMAction, RenderAction { return new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - if (instance == null) { - WXLogUtils.e("RenderActionContextImpl-onAnimationEnd WXSDKInstance == null NPE"); + if (instance == null || instance.isDestroy()) { + WXLogUtils.e("RenderActionContextImpl-onAnimationEnd WXSDKInstance == null NPE or instance is destroyed"); } else { WXSDKManager.getInstance().callback(instance.getInstanceId(), callBack, http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java index 5b7822c..aa56e70 100644 --- a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java +++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java @@ -74,8 +74,8 @@ class UpdateStyleAction implements DOMAction, RenderAction { mBorder = domObject.getBorder(); Map<String, Object> animationMap = new ArrayMap<>(2); - animationMap.put(WXDomObject.TRANSFORM, mData.remove(WXDomObject.TRANSFORM)); - animationMap.put(WXDomObject.TRANSFORM_ORIGIN, mData.remove(WXDomObject.TRANSFORM_ORIGIN)); + animationMap.put(WXDomObject.TRANSFORM, mData.get(WXDomObject.TRANSFORM)); + animationMap.put(WXDomObject.TRANSFORM_ORIGIN, mData.get(WXDomObject.TRANSFORM_ORIGIN)); context.addAnimationForElement(mRef, animationMap); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java deleted file mode 100644 index bfac085..0000000 --- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package com.taobao.weex.ui.animation; - -import android.animation.IntEvaluator; -import android.animation.TimeInterpolator; -import android.animation.ValueAnimator; -import android.support.annotation.NonNull; -import android.support.v4.util.Pair; -import android.view.View; -import android.view.ViewGroup; - -import com.taobao.weex.ui.component.WXComponent; -import com.taobao.weex.ui.view.IRenderResult; - -public class DimensionUpdateListener implements ValueAnimator.AnimatorUpdateListener { - - private View view; - private Pair<Integer, Integer> width; - private Pair<Integer, Integer> height; - private IntEvaluator intEvaluator; - - public DimensionUpdateListener(@NonNull View view) { - this.view = view; - intEvaluator = new IntEvaluator(); - } - - public void setWidth(int from, int to) { - width = new Pair<>(from, to); - } - - public void setHeight(int from, int to) { - height = new Pair<>(from, to); - } - - @Override - public void onAnimationUpdate(ValueAnimator animation) { - if (view.getLayoutParams() != null) { - ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); - TimeInterpolator interpolator = animation.getInterpolator(); - float fraction = animation.getAnimatedFraction(); - int preWidth = layoutParams.width; - int preHeight = layoutParams.height; - if (width != null) { - layoutParams.width = intEvaluator.evaluate(interpolator.getInterpolation(fraction), - width.first, - width.second); - } - if (height != null) { - layoutParams.height = intEvaluator.evaluate(interpolator.getInterpolation(fraction), - height.first, - height.second); - } - if (preHeight != layoutParams.height || preWidth != layoutParams.width) { - view.requestLayout(); - } - - if (view instanceof IRenderResult) { - WXComponent component = ((IRenderResult) view).getComponent(); - if (component != null) { - if (preWidth != layoutParams.width || preHeight != layoutParams.height) { - //Notify the animated component it native size has changed - //The component will decides whether to update domobject - component.notifyNativeSizeChanged(layoutParams.width, layoutParams.height); - } - } - } - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/ui/animation/HeightProperty.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/HeightProperty.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/HeightProperty.java new file mode 100644 index 0000000..b268ed2 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/HeightProperty.java @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.taobao.weex.ui.animation; + + +import android.view.ViewGroup.LayoutParams; + +public class HeightProperty extends LayoutParamsProperty { + + @Override + protected Integer getProperty(LayoutParams layoutParams) { + return layoutParams.height; + } + + @Override + protected void setProperty(LayoutParams layoutParams, Integer expected) { + layoutParams.height = expected; + } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/ui/animation/LayoutParamsProperty.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/LayoutParamsProperty.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/LayoutParamsProperty.java new file mode 100644 index 0000000..312180e --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/LayoutParamsProperty.java @@ -0,0 +1,64 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.taobao.weex.ui.animation; + + +import android.util.Property; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import com.taobao.weex.ui.component.WXComponent; +import com.taobao.weex.ui.view.IRenderResult; + +/** + * android.util.IntProperty<T> cannot be applied here, as it is only added at API 24. + */ +abstract class LayoutParamsProperty extends Property<View, Integer> { + + LayoutParamsProperty() { + super(Integer.class, "layoutParams"); + } + + @Override + public Integer get(View object) { + LayoutParams layoutParams; + if (object != null && (layoutParams = object.getLayoutParams()) != null) { + return getProperty(layoutParams); + } + return 0; + } + + @Override + public void set(View object, Integer value) { + LayoutParams layoutParams; + if (object != null && (layoutParams = object.getLayoutParams()) != null) { + setProperty(layoutParams, value); + if (object instanceof IRenderResult) { + WXComponent component = ((IRenderResult) object).getComponent(); + if (component != null) { + component.notifyNativeSizeChanged(layoutParams.width, layoutParams.height); + } + } + object.requestLayout(); + } + } + + protected abstract Integer getProperty(LayoutParams layoutParams); + + protected abstract void setProperty(LayoutParams layoutParams, Integer expected); +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java index 0cd2901..2635d7c 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java @@ -26,13 +26,11 @@ import android.text.TextUtils; import android.util.Pair; import android.util.Property; import android.view.View; - import com.taobao.weex.common.Constants; import com.taobao.weex.utils.FunctionParser; import com.taobao.weex.utils.WXDataStructureUtil; import com.taobao.weex.utils.WXUtils; import com.taobao.weex.utils.WXViewUtils; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -65,6 +63,8 @@ public class WXAnimationBean { public final static String WX_SCALE_X = "scaleX"; public final static String WX_SCALE_Y = "scaleY"; public final static String WX_SCALE = "scale"; + public final static String WX_ROTATE_X ="rotateX"; + public final static String WX_ROTATE_Y ="rotateY"; public final static String BACKGROUND_COLOR = Constants.Name.BACKGROUND_COLOR; public final static String WIDTH = Constants.Name.WIDTH; public final static String HEIGHT = Constants.Name.HEIGHT; @@ -86,6 +86,8 @@ public class WXAnimationBean { wxToAndroidMap.put(WX_TRANSLATE_X, Collections.singletonList(View.TRANSLATION_X)); wxToAndroidMap.put(WX_TRANSLATE_Y, Collections.singletonList(View.TRANSLATION_Y)); wxToAndroidMap.put(WX_ROTATE, Collections.singletonList(View.ROTATION)); + wxToAndroidMap.put(WX_ROTATE_X, Collections.singletonList(View.ROTATION_X)); + wxToAndroidMap.put(WX_ROTATE_Y, Collections.singletonList(View.ROTATION_Y)); wxToAndroidMap.put(WX_SCALE, Arrays.asList(View.SCALE_X, View.SCALE_Y)); wxToAndroidMap.put(WX_SCALE_X, Collections.singletonList(View.SCALE_X)); wxToAndroidMap.put(WX_SCALE_Y, Collections.singletonList(View.SCALE_Y)); @@ -110,31 +112,34 @@ public class WXAnimationBean { @Override public Map<Property<View,Float>, Float> map(String functionName, List<String> raw) { if (raw != null && !raw.isEmpty()) { - if (WXAnimationBean.Style.wxToAndroidMap.containsKey(functionName)) { - return convertParam(width, height,viewportW, - WXAnimationBean.Style.wxToAndroidMap.get(functionName), raw); + if (wxToAndroidMap.containsKey(functionName)) { + return convertParam(width, height,viewportW, wxToAndroidMap.get(functionName), raw); } } return new HashMap<>(); } private Map<Property<View,Float>, Float> convertParam(int width, int height,int viewportW, - @NonNull List<Property<View,Float>> nameSet, + @NonNull List<Property<View,Float>> propertyList, @NonNull List<String> rawValue) { - Map<Property<View,Float>, Float> result = WXDataStructureUtil.newHashMapWithExpectedSize(nameSet.size()); - List<Float> convertedList = new ArrayList<>(nameSet.size()); - if (nameSet.contains(View.ROTATION)) { - convertedList.addAll(parseRotation(rawValue)); - } else if (nameSet.contains(View.TRANSLATION_X) || - nameSet.contains(View.TRANSLATION_Y)) { - convertedList.addAll(parseTranslation(nameSet, width, height, rawValue,viewportW)); - } else if (nameSet.contains(View.SCALE_X) || - nameSet.contains(View.SCALE_Y)) { - convertedList.addAll(parseScale(nameSet.size(), rawValue)); + Map<Property<View,Float>, Float> result = WXDataStructureUtil.newHashMapWithExpectedSize(propertyList.size()); + List<Float> convertedList = new ArrayList<>(propertyList.size()); + if (propertyList.contains(View.ROTATION)) { + convertedList.addAll(parseRotationZ(rawValue)); + }else if(propertyList.contains(View.ROTATION_X)) { + convertedList.addAll(parseRotationXY(rawValue)); + }else if(propertyList.contains(View.ROTATION_Y)) { + convertedList.addAll(parseRotationXY(rawValue)); + }else if (propertyList.contains(View.TRANSLATION_X) || + propertyList.contains(View.TRANSLATION_Y)) { + convertedList.addAll(parseTranslation(propertyList, width, height, rawValue,viewportW)); + } else if (propertyList.contains(View.SCALE_X) || + propertyList.contains(View.SCALE_Y)) { + convertedList.addAll(parseScale(propertyList.size(), rawValue)); } - if (nameSet.size() == convertedList.size()) { - for (int i = 0; i < nameSet.size(); i++) { - result.put(nameSet.get(i), convertedList.get(i)); + if (propertyList.size() == convertedList.size()) { + for (int i = 0; i < propertyList.size(); i++) { + result.put(propertyList.get(i), convertedList.get(i)); } } return result; @@ -153,7 +158,15 @@ public class WXAnimationBean { return convertedList; } - private List<Float> parseRotation(@NonNull List<String> rawValue) { + private List<Float> parseRotationXY(@NonNull List<String> rawValue) { + List<Float> intermediate = parseRotationZ(rawValue); + for (int i = 0; i < intermediate.size(); i++) { + intermediate.set(i, -intermediate.get(i)); + } + return intermediate; + } + + private @NonNull List<Float> parseRotationZ(@NonNull List<String> rawValue) { List<Float> convertedList = new ArrayList<>(1); int suffix; for (String raw : rawValue) { @@ -166,25 +179,30 @@ public class WXAnimationBean { return convertedList; } - - private List<Float> parseTranslation(List<Property<View,Float>> nameSet, + /** + * As "translate(50%, 25%)" or "translate(25px, 30px)" both are valid, + * parsing translate is complicated than other method. + * Add your waste time here if you try to optimize this method like {@link #parseScale(int, List)} + * Time: 0.5h + */ + private List<Float> parseTranslation(List<Property<View,Float>> propertyList, int width, int height, @NonNull List<String> rawValue,int viewportW) { List<Float> convertedList = new ArrayList<>(2); String first = rawValue.get(0); - if (nameSet.size() == 1) { - parseSingleTranslation(nameSet, width, height, convertedList, first,viewportW); + if (propertyList.size() == 1) { + parseSingleTranslation(propertyList, width, height, convertedList, first,viewportW); } else { parseDoubleTranslation(width, height, rawValue, convertedList, first,viewportW); } return convertedList; } - private void parseSingleTranslation(List<Property<View,Float>> nameSet, int width, int height, + private void parseSingleTranslation(List<Property<View,Float>> propertyList, int width, int height, List<Float> convertedList, String first,int viewportW) { - if (nameSet.contains(View.TRANSLATION_X)) { + if (propertyList.contains(View.TRANSLATION_X)) { convertedList.add(parsePercentOrPx(first, width,viewportW)); - } else if (nameSet.contains(View.TRANSLATION_Y)) { + } else if (propertyList.contains(View.TRANSLATION_Y)) { convertedList.add(parsePercentOrPx(first, height,viewportW)); } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/android/sdk/src/main/java/com/taobao/weex/ui/animation/WidthProperty.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WidthProperty.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WidthProperty.java new file mode 100644 index 0000000..ca4288f --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WidthProperty.java @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.taobao.weex.ui.animation; + + +import android.view.ViewGroup.LayoutParams; + +public class WidthProperty extends LayoutParamsProperty { + + @Override + protected Integer getProperty(LayoutParams layoutParams) { + return layoutParams.width; + } + + @Override + protected void setProperty(LayoutParams layoutParams, Integer expected) { + layoutParams.width = expected; + } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd911636/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 659cb16..b725397 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 @@ -39,7 +39,6 @@ import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; - import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.taobao.weex.IWXActivityStateListener; @@ -72,7 +71,6 @@ import com.taobao.weex.utils.WXReflectionUtils; import com.taobao.weex.utils.WXResourceUtils; import com.taobao.weex.utils.WXUtils; import com.taobao.weex.utils.WXViewUtils; - import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; @@ -708,6 +706,19 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi } } + private void setPerspective(Object param) { + T host = getHostView(); + if (host != null) { + float value = WXUtils.getFloatByViewport(param, getInstance().getInstanceViewPortWidth()); + float scale = host.getResources().getDisplayMetrics().density; + if (!Float.isNaN(value) && value > 0) { + host.setCameraDistance(value * scale); + } else { + host.setCameraDistance(Float.MAX_VALUE); + } + } + } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void setAriaHidden(boolean isHidden) { View host = getHostView(); @@ -918,6 +929,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi */ @CallSuper protected void onHostViewInitialized(T host){ + host.setCameraDistance(Float.MAX_VALUE); if (mAnimationHolder != null) { //Performs cached animation mAnimationHolder.execute(mInstance, this);