* [android] Move perspective from style to transform

Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/cc49764e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/cc49764e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/cc49764e

Branch: refs/heads/0.16-dev
Commit: cc49764e6de39774804904f163b5d51fdfc520ef
Parents: 924d252
Author: YorkShen <shenyua...@gmail.com>
Authored: Thu Jul 27 11:30:26 2017 +0800
Committer: YorkShen <shenyua...@gmail.com>
Committed: Thu Jul 27 11:30:26 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/dom/action/AnimationAction.java |  1 +
 .../ui/animation/CameraDistanceProperty.java    | 54 ++++++++++++++++++++
 .../weex/ui/animation/WXAnimationBean.java      | 26 ++++++++++
 .../taobao/weex/ui/component/WXComponent.java   | 22 --------
 4 files changed, 81 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cc49764e/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 59afbca..5510ea9 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
@@ -155,6 +155,7 @@ class AnimationAction implements DOMAction, RenderAction {
             if (interpolator != null) {
               animator.setInterpolator(interpolator);
             }
+            
component.getHostView().setCameraDistance(mAnimationBean.styles.getCameraDistance());
             animator.setDuration(mAnimationBean.duration);
             animator.start();
           }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cc49764e/android/sdk/src/main/java/com/taobao/weex/ui/animation/CameraDistanceProperty.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/ui/animation/CameraDistanceProperty.java
 
b/android/sdk/src/main/java/com/taobao/weex/ui/animation/CameraDistanceProperty.java
new file mode 100644
index 0000000..67b9235
--- /dev/null
+++ 
b/android/sdk/src/main/java/com/taobao/weex/ui/animation/CameraDistanceProperty.java
@@ -0,0 +1,54 @@
+/**
+ * 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.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.util.Property;
+import android.view.View;
+
+
+class CameraDistanceProperty extends Property<View, Float> {
+
+  private final static String TAG = "CameraDistance";
+  private static CameraDistanceProperty instance;
+
+  static Property<View, Float> getInstance(){
+    return instance;
+  }
+
+  private CameraDistanceProperty() {
+    super(Float.class, TAG);
+  }
+
+  @Override
+  public Float get(View view) {
+    if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
+      return view.getCameraDistance();
+    }
+    else{
+      return Float.NaN;
+    }
+  }
+
+  @Override
+  public void set(View object, Float value) {
+    object.setCameraDistance(value);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cc49764e/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 54b3111..d83b85a 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,7 +26,9 @@ import android.text.TextUtils;
 import android.util.Pair;
 import android.util.Property;
 import android.view.View;
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.Constants.Name;
 import com.taobao.weex.utils.FunctionParser;
 import com.taobao.weex.utils.WXDataStructureUtil;
 import com.taobao.weex.utils.WXUtils;
@@ -91,6 +93,7 @@ public class WXAnimationBean {
       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));
+      wxToAndroidMap.put(Name.PERSPECTIVE, 
Collections.singletonList(CameraDistanceProperty.getInstance()));
       wxToAndroidMap = Collections.unmodifiableMap(wxToAndroidMap);
     }
 
@@ -103,6 +106,7 @@ public class WXAnimationBean {
     private Map<Property<View, Float>, Float> transformMap = new HashMap<>();
     private Pair<Float, Float> pivot;
     private List<PropertyValuesHolder> holders=new LinkedList<>();
+    private float cameraDistance = Float.MAX_VALUE;
 
     private static Map<Property<View,Float>, Float> parseTransForm(@Nullable 
String rawTransform, final int width,
                                                 final int height,final int 
viewportW) {
@@ -135,6 +139,9 @@ public class WXAnimationBean {
                            propertyList.contains(View.SCALE_Y)) {
                   convertedList.addAll(parseScale(propertyList.size(), 
rawValue));
                 }
+                else 
if(propertyList.contains(CameraDistanceProperty.getInstance())){
+                  convertedList.add(parseCameraDistance(rawValue));
+                }
                 if (propertyList.size() == convertedList.size()) {
                   for (int i = 0; i < propertyList.size(); i++) {
                     result.put(propertyList.get(i), convertedList.get(i));
@@ -209,6 +216,18 @@ public class WXAnimationBean {
                 convertedList.add(parsePercentOrPx(first, width,viewportW));
                 convertedList.add(parsePercentOrPx(second, height,viewportW));
               }
+
+              private Float parseCameraDistance(List<String> rawValue){
+                float ret=Float.MAX_VALUE;
+                if(rawValue.size() == 1){
+                  float value = 
WXViewUtils.getRealPxByWidth(WXUtils.getFloat(rawValue.get(0)), viewportW);
+                  float scale = 
WXEnvironment.getApplication().getResources().getDisplayMetrics().density;
+                  if (!Float.isNaN(value) && value > 0) {
+                    ret = value * scale;
+                  }
+                }
+                return ret;
+              }
             });
         return parser.parse();
       }
@@ -300,6 +319,9 @@ public class WXAnimationBean {
       pivot = parsePivot(transformOrigin,width,height,viewportW);
       transformMap = createDefaultTransform();
       transformMap.putAll(parseTransForm(rawTransform,width,height,viewportW));
+      if(transformMap.containsKey(CameraDistanceProperty.getInstance())){
+        cameraDistance = 
transformMap.remove(CameraDistanceProperty.getInstance());
+      }
       initHolders();
     }
 
@@ -315,5 +337,9 @@ public class WXAnimationBean {
     public List<PropertyValuesHolder> getHolders(){
       return holders;
     }
+
+    public float getCameraDistance(){
+      return cameraDistance;
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cc49764e/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 80cd4db..3d769d4 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
@@ -48,7 +48,6 @@ import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.bridge.Invoker;
 import com.taobao.weex.common.Constants;
-import com.taobao.weex.common.Constants.Name;
 import com.taobao.weex.common.IWXObject;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.dom.ImmutableDomObject;
@@ -676,8 +675,6 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
           updateElevation();
         }
         return true;
-      case Name.PERSPECTIVE:
-        return setPerspective(param);
       case PROP_FIXED_SIZE:
         String fixedSize = WXUtils.getString(param, PROP_FS_MATCH_PARENT);
         setFixedSize(fixedSize);
@@ -722,22 +719,6 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
     }
   }
 
-  private boolean setPerspective(Object param) {
-    T host = getHostView();
-    boolean ret = false;
-    if (host != null) {
-      float value = WXViewUtils.getRealPxByWidth(WXUtils.getFloat(param), 
getInstance().getInstanceViewPortWidth());
-      float scale = host.getResources().getDisplayMetrics().density;
-      if (!Float.isNaN(value) && value > 0) {
-        host.setCameraDistance(value * scale);
-        ret = true;
-      } else {
-        host.setCameraDistance(Float.MAX_VALUE);
-      }
-    }
-    return ret;
-  }
-
   @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
   protected void setAriaHidden(boolean isHidden) {
     View host = getHostView();
@@ -963,9 +944,6 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
    */
   @CallSuper
   protected void onHostViewInitialized(T host){
-    if(host!=null){
-      host.setCameraDistance(Float.MAX_VALUE);
-    }
     if (mAnimationHolder != null) {
       //Performs cached animation
       mAnimationHolder.execute(mInstance, this);

Reply via email to