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 2017/08/23 08:31:06 UTC
incubator-weex git commit: * [android] Refactor the code of resize
attr on image.
Repository: incubator-weex
Updated Branches:
refs/heads/0.16-dev 4025b5b36 -> 849ed3eb7
* [android] Refactor the code of resize attr on image.
The "resize" attribute on image doesn't depend on ImageView.setScaleType any longer, BitmapShader can do all the work.
* [android] Update WXImage
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/849ed3eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/849ed3eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/849ed3eb
Branch: refs/heads/0.16-dev
Commit: 849ed3eb76fc5cf64065d5f8834cc5be3fa4f20c
Parents: 4025b5b
Author: YorkShen <sh...@gmail.com>
Authored: Tue Aug 22 11:37:04 2017 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Wed Aug 23 16:06:36 2017 +0800
----------------------------------------------------------------------
.../commons/adapter/FrescoImageComponent.java | 2 +-
.../com/taobao/weex/ui/component/WXImage.java | 75 ++++++++++----------
.../com/taobao/weex/ui/view/WXImageView.java | 16 ++++-
.../com/taobao/weex/utils/ImageDrawable.java | 17 ++---
4 files changed, 56 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ed3eb/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
----------------------------------------------------------------------
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
index 109302f..8573e8a 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
@@ -38,7 +38,7 @@ public class FrescoImageComponent extends WXImage {
@Override
protected ImageView initComponentHostView(@NonNull Context context) {
FrescoImageView view = new FrescoImageView(context);
- view.setScaleType(ImageView.ScaleType.FIT_XY);
+ view.setScaleType(WXImage.DEFAULT_SCALE_TYPE);
return view;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ed3eb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
index db58d99..8fda814 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
@@ -31,7 +31,6 @@ import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
-
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
@@ -51,12 +50,11 @@ import com.taobao.weex.ui.view.border.BorderDrawable;
import com.taobao.weex.utils.ImageDrawable;
import com.taobao.weex.utils.ImgURIUtil;
import com.taobao.weex.utils.SingleFunctionParser;
-import com.taobao.weex.utils.WXViewToImageUtil;
import com.taobao.weex.utils.WXDomUtils;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
+import com.taobao.weex.utils.WXViewToImageUtil;
import com.taobao.weex.utils.WXViewUtils;
-
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashMap;
@@ -71,6 +69,7 @@ public class WXImage extends WXComponent<ImageView> {
public static final String SUCCEED = "success";
public static final String ERRORDESC = "errorDesc";
+ public final static ScaleType DEFAULT_SCALE_TYPE = ScaleType.FIT_XY;
private String mSrc;
private int mBlurRadius;
@@ -102,7 +101,7 @@ public class WXImage extends WXComponent<ImageView> {
@Override
protected ImageView initComponentHostView(@NonNull Context context) {
WXImageView view = new WXImageView(context);
- view.setScaleType(ScaleType.FIT_XY);
+ view.setScaleType(DEFAULT_SCALE_TYPE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setCropToPadding(true);
}
@@ -153,32 +152,23 @@ public class WXImage extends WXComponent<ImageView> {
@WXComponentProp(name = Constants.Name.RESIZE_MODE)
public void setResizeMode(String resizeMode) {
- (getHostView()).setScaleType(getResizeMode(resizeMode));
- }
-
- private ScaleType getResizeMode(String resizeMode) {
- ScaleType scaleType = ScaleType.FIT_XY;
- if (TextUtils.isEmpty(resizeMode)) {
- return scaleType;
- }
-
- switch (resizeMode) {
- case "cover":
- scaleType = ScaleType.CENTER_CROP;
- break;
- case "contain":
- scaleType = ScaleType.FIT_CENTER;
- break;
- case "stretch":
- scaleType = ScaleType.FIT_XY;
- break;
- }
- return scaleType;
+ setResize(resizeMode);
}
@WXComponentProp(name = Constants.Name.RESIZE)
public void setResize(String resize) {
- (getHostView()).setScaleType(getResizeMode(resize));
+ ScaleType scaleType = DEFAULT_SCALE_TYPE;
+ if (!TextUtils.isEmpty(resize)) {
+ switch (resize) {
+ case "cover":
+ scaleType = ScaleType.CENTER_CROP;
+ break;
+ case "contain":
+ scaleType = ScaleType.FIT_CENTER;
+ break;
+ }
+ }
+ getHostView().setScaleType(scaleType);
}
/**
@@ -321,27 +311,34 @@ public class WXImage extends WXComponent<ImageView> {
if ((imageDom = getDomObject()) != null &&
getHostView() instanceof WXImageView) {
imageView = (WXImageView) getHostView();
- BorderDrawable borderDrawable = WXViewUtils.getBorderDrawable(getHostView());
- float[] borderRadius;
- if (borderDrawable != null) {
- RectF borderBox = new RectF(0, 0, WXDomUtils.getContentWidth(imageDom), WXDomUtils.getContentHeight(imageDom));
- borderRadius = borderDrawable.getBorderRadius(borderBox);
- } else {
- borderRadius = new float[]{0, 0, 0, 0, 0, 0, 0, 0};
- }
+ BorderDrawable borderDrawable = WXViewUtils.getBorderDrawable(imageView);
+ float[] borderRadius = extractBorderRadius(imageDom, borderDrawable);
imageView.setBorderRadius(borderRadius);
if (imageView.getDrawable() instanceof ImageDrawable) {
- ImageDrawable imageDrawable = (ImageDrawable) imageView.getDrawable();
- float[] previousRadius = imageDrawable.getCornerRadii();
- if (!Arrays.equals(previousRadius, borderRadius)) {
- imageDrawable.setCornerRadii(borderRadius);
- }
+ updateImageDrawable(borderRadius, (ImageDrawable) imageView.getDrawable());
}
readyToRender();
}
}
+ private void updateImageDrawable(float[] borderRadius, ImageDrawable imageDrawable) {
+ if (!Arrays.equals(imageDrawable.getCornerRadii(), borderRadius)) {
+ imageDrawable.setCornerRadii(borderRadius);
+ }
+ }
+
+ private float[] extractBorderRadius(ImmutableDomObject imageDom, BorderDrawable borderDrawable) {
+ float[] borderRadius;
+ if (borderDrawable != null) {
+ RectF borderBox = new RectF(0, 0, WXDomUtils.getContentWidth(imageDom), WXDomUtils.getContentHeight(imageDom));
+ borderRadius = borderDrawable.getBorderRadius(borderBox);
+ } else {
+ borderRadius = new float[]{0, 0, 0, 0, 0, 0, 0, 0};
+ }
+ return borderRadius;
+ }
+
/**
* Need permission {android.permission.WRITE_EXTERNAL_STORAGE}
*/
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ed3eb/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
index dd7b2bc..6125aeb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
@@ -27,13 +27,11 @@ import android.support.annotation.Nullable;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.widget.ImageView;
-
import com.taobao.weex.ui.component.WXImage;
import com.taobao.weex.ui.view.gesture.WXGesture;
import com.taobao.weex.ui.view.gesture.WXGestureObservable;
import com.taobao.weex.utils.ImageDrawable;
import com.taobao.weex.utils.WXLogUtils;
-
import java.lang.ref.WeakReference;
import java.util.Arrays;
@@ -45,6 +43,7 @@ public class WXImageView extends ImageView implements WXGestureObservable,
private WXGesture wxGesture;
private float[] borderRadius;
private boolean gif;
+ private ScaleType mScaleType = WXImage.DEFAULT_SCALE_TYPE;
public WXImageView(Context context) {
super(context);
@@ -129,6 +128,19 @@ public class WXImageView extends ImageView implements WXGestureObservable,
}
@Override
+ public void setScaleType(ScaleType scaleType) {
+ if(scaleType == WXImage.DEFAULT_SCALE_TYPE){
+ super.setScaleType(scaleType);
+ }
+ mScaleType = scaleType;
+ }
+
+ @Override
+ public ScaleType getScaleType() {
+ return mScaleType;
+ }
+
+ @Override
public int getNaturalWidth() {
Drawable drawable = getDrawable();
if (drawable != null) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ed3eb/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java b/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
index 142bf7a..16a939e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
@@ -68,25 +68,18 @@ public class ImageDrawable extends PaintDrawable {
Matrix matrix = createShaderMatrix(scaleType, vWidth, vHeight,
imageDrawable.bitmapWidth,
imageDrawable.bitmapHeight);
- int intrinsicWidth = vWidth, intrinsicHeight = vHeight;
- if (scaleType == ImageView.ScaleType.FIT_CENTER) {
- RectF bitmapRect = new RectF(0, 0, imageDrawable.bitmapWidth, imageDrawable.bitmapHeight), contentRect = new RectF();
- matrix.mapRect(contentRect, bitmapRect);
- intrinsicWidth = (int) contentRect.width();
- intrinsicHeight = (int) contentRect.height();
- matrix = createShaderMatrix(scaleType, intrinsicWidth, intrinsicHeight, imageDrawable
- .bitmapWidth, imageDrawable.bitmapHeight);
- }
- imageDrawable.setIntrinsicWidth(intrinsicWidth);
- imageDrawable.setIntrinsicHeight(intrinsicHeight);
+ imageDrawable.setIntrinsicWidth(vWidth);
+ imageDrawable.setIntrinsicHeight(vHeight);
bitmapShader.setLocalMatrix(matrix);
}
+
+
@NonNull
private static Matrix createShaderMatrix(@NonNull ImageView.ScaleType scaleType, int vWidth,
int vHeight, int bmWidth, int bmHeight) {
+ //Refer ImageView#configureBounds()
float scale, translateX = 0, translateY = 0;
-
if (bmWidth * vHeight > bmHeight * vWidth) {
scale = vHeight / (float) bmHeight;
translateX = (vWidth - bmWidth * scale) * 0.5f;