Android: resize image support tile mode.

This commit is contained in:
吴尚昆 2022-03-18 17:13:04 +08:00 committed by osborn
parent 22f290f6a9
commit 31f45d161f

View File

@ -25,6 +25,7 @@ import android.graphics.Color;
import android.graphics.Matrix; import android.graphics.Matrix;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.Animatable; import android.graphics.drawable.Animatable;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
@ -52,8 +53,8 @@ import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.bumptech.glide.request.target.SizeReadyCallback; import com.bumptech.glide.request.target.SizeReadyCallback;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.facebook.yoga.YogaNode; import com.facebook.yoga.YogaNode;
import com.github.pengfeizhou.jscore.ArchiveException; import com.github.pengfeizhou.jscore.JSBoolean;
import com.github.pengfeizhou.jscore.JSDecoder; import com.github.pengfeizhou.jscore.JSNumber;
import com.github.pengfeizhou.jscore.JSONBuilder; import com.github.pengfeizhou.jscore.JSONBuilder;
import com.github.pengfeizhou.jscore.JSObject; import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue; import com.github.pengfeizhou.jscore.JSValue;
@ -62,7 +63,6 @@ import com.github.pengfeizhou.jscore.JavaValue;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File; import java.io.File;
import java.io.InputStream;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -162,10 +162,25 @@ public class ImageNode extends ViewNode<ImageView> {
if (stretchInsetValue.isObject()) { if (stretchInsetValue.isObject()) {
this.stretchInset = stretchInsetValue.asObject(); this.stretchInset = stretchInsetValue.asObject();
} }
JSValue tileInsetValue = jsObject.getProperty("tileInset"); JSValue tileInsetValue = jsObject.getProperty("tileInset");
if (tileInsetValue.isObject()) { if (tileInsetValue.isBoolean()) {
if (tileInsetValue.asBoolean().value()) {
// If boolean value 'true' is passed, it equals { left: 0, top: 0, right: 0, bottom: 0 }
JSObject obj = new JSObject();
JSNumber zero = new JSNumber(0);
obj.setProperty("top", zero);
obj.setProperty("left", zero);
obj.setProperty("right", zero);
obj.setProperty("bottom", zero);
this.tileInset = obj;
} else {
this.tileInset = null;
}
} else if (tileInsetValue.isObject()) {
this.tileInset = tileInsetValue.asObject(); this.tileInset = tileInsetValue.asObject();
} } else { }
JSValue imageScaleValue = jsObject.getProperty("imageScale"); JSValue imageScaleValue = jsObject.getProperty("imageScale");
if (imageScaleValue.isNumber()) { if (imageScaleValue.isNumber()) {
this.imageScale = imageScaleValue.asNumber().toFloat(); this.imageScale = imageScaleValue.asNumber().toFloat();
@ -397,14 +412,13 @@ public class ImageNode extends ViewNode<ImageView> {
(int) (bitmap.getHeight() - bottom) (int) (bitmap.getHeight() - bottom)
); );
NinePatchDrawable ninePatchDrawable = new NinePatchDrawable( Matrix matrix = new Matrix();
getContext().getResources(), matrix.setScale(1, 1);
bitmap, bitmap = Bitmap.createBitmap(bitmap, rect.left, rect.top, rect.width(), rect.height(), matrix, true);
DoricUtils.getNinePatchChunk(rect), BitmapDrawable drawable = new BitmapDrawable(getContext().getResources(),bitmap);
rect, drawable.setTileModeXY(Shader.TileMode.REPEAT , Shader.TileMode.REPEAT);
null drawable.setDither(true);
); super.setResource(drawable);
super.setResource(ninePatchDrawable);
} else { } else {
super.setResource(resource); super.setResource(resource);
} }