You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/11/29 03:27:55 UTC

[incubator-weex] branch master updated: * [Android] interaction position for fixed element (#1839)

This is an automated email from the ASF dual-hosted git repository.

kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 8780ecd  * [Android] interaction position for fixed element (#1839)
8780ecd is described below

commit 8780ecd8b16c4697e6ae4cc0109d387236df682d
Author: chen <lu...@users.noreply.github.com>
AuthorDate: Thu Nov 29 11:27:50 2018 +0800

    * [Android] interaction position for fixed element (#1839)
---
 .../com/taobao/weex/ui/component/WXComponent.java  | 46 +++++++++++++++-------
 1 file changed, 31 insertions(+), 15 deletions(-)

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 1255579..1e1353e 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
@@ -173,6 +173,8 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
   private String mLastBoxShadowId;
   public int mDeepInComponentTree = 0;
   public boolean mIsAddElementToTree = false;
+  //for fix element case
+  public int interactionAbsoluteX=0,interactionAbsoluteY=0;
 
   public WXTracing.TraceInfo mTraceInfo = new WXTracing.TraceInfo();
 
@@ -988,21 +990,6 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
     mAbsoluteY = (int) (nullParent ? 0 : mParent.getAbsoluteY() + getCSSLayoutTop());
     mAbsoluteX = (int) (nullParent ? 0 : mParent.getAbsoluteX() + getCSSLayoutLeft());
 
-    if (mIsAddElementToTree){
-      if (null == getInstance().getApmForInstance().instanceRect){
-        getInstance().getApmForInstance().instanceRect = new Rect();
-      }
-      Rect instanceRect = getInstance().getApmForInstance().instanceRect;
-      instanceRect.set(0,0,mInstance.getWeexWidth(),mInstance.getWeexHeight());
-      boolean inScreen =
-          instanceRect.contains(mAbsoluteX,mAbsoluteY) //leftTop
-          || instanceRect.contains(mAbsoluteX+realWidth,mAbsoluteY)//rightTop
-          || instanceRect.contains(mAbsoluteX,mAbsoluteY+realHeight)//leftBottom
-          || instanceRect.contains(mAbsoluteX+realWidth,mAbsoluteY+realHeight);//rightBottom
-      mInstance.onChangeElement(this,!inScreen);
-    }
-
-
     if (mHost == null) {
       return;
     }
@@ -1051,6 +1038,7 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
       } else {
         setHostLayoutParams(mHost, realWidth, realHeight, realLeft, realRight, realTop, realBottom);
       }
+      recordInteraction(realWidth,realHeight);
       mPreRealWidth = realWidth;
       mPreRealHeight = realHeight;
       mPreRealLeft = realLeft;
@@ -1062,6 +1050,34 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
     }
   }
 
+  private void recordInteraction(int realWidth,int realHeight){
+    if (!mIsAddElementToTree){
+      return;
+    }
+    mIsAddElementToTree = false;
+    if (null == mParent){
+      interactionAbsoluteX = 0;
+      interactionAbsoluteY = 0;
+    }else {
+      float cssTop = getCSSLayoutTop();
+      float cssLeft = getCSSLayoutLeft();
+      interactionAbsoluteX = (int)(this.isFixed() ? cssLeft : mParent.interactionAbsoluteX + cssLeft);
+      interactionAbsoluteY = (int)(this.isFixed() ? cssTop  : mParent.interactionAbsoluteY + cssTop);
+    }
+
+    if (null == getInstance().getApmForInstance().instanceRect){
+      getInstance().getApmForInstance().instanceRect = new Rect();
+    }
+    Rect instanceRect = getInstance().getApmForInstance().instanceRect;
+    instanceRect.set(0,0,mInstance.getWeexWidth(),mInstance.getWeexHeight());
+    boolean inScreen =
+          instanceRect.contains(interactionAbsoluteX,interactionAbsoluteY) //leftTop
+              || instanceRect.contains(interactionAbsoluteX+realWidth,interactionAbsoluteY)//rightTop
+              || instanceRect.contains(interactionAbsoluteX,interactionAbsoluteY+realHeight)//leftBottom
+              || instanceRect.contains(interactionAbsoluteX+realWidth,interactionAbsoluteY+realHeight);//rightBottom
+    mInstance.onChangeElement(this,!inScreen);
+  }
+
   private void setWidgetParams(Widget widget, FlatGUIContext UIImp, Point rawoffset,
                                int width, int height, int left, int right, int top, int bottom) {
     Point childOffset = new Point();