Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

*[Android] interaction position for fix element #1839

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -988,21 +990,6 @@ public void setLayout(WXComponent component) {
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;
}
Expand Down Expand Up @@ -1051,6 +1038,7 @@ private void setComponentLayoutParams(int realWidth, int realHeight, int realLef
} else {
setHostLayoutParams(mHost, realWidth, realHeight, realLeft, realRight, realTop, realBottom);
}
recordInteraction(realWidth,realHeight);
mPreRealWidth = realWidth;
mPreRealHeight = realHeight;
mPreRealLeft = realLeft;
Expand All @@ -1062,6 +1050,34 @@ private void setComponentLayoutParams(int realWidth, int realHeight, int realLef
}
}

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();
Expand Down