mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat(android): support drawable in ImageSource (#10098)
This allows passing a drawable as another source option
This commit is contained in:
@ -291,8 +291,13 @@ export class ImageSource implements ImageSourceDefinition {
|
||||
|
||||
public setNativeSource(source: any): void {
|
||||
if (source && !(source instanceof android.graphics.Bitmap)) {
|
||||
throw new Error('The method setNativeSource() expects android.graphics.Bitmap instance.');
|
||||
if (source instanceof android.graphics.drawable.Drawable) {
|
||||
this.android = org.nativescript.widgets.Utils.getBitmapFromDrawable(source);
|
||||
return;
|
||||
}
|
||||
throw new Error('The method setNativeSource() expects an android.graphics.Bitmap or android.graphics.drawable.Drawable instance.');
|
||||
}
|
||||
|
||||
this.android = source;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@ -687,6 +687,7 @@ declare module org {
|
||||
export module widgets {
|
||||
export class Utils {
|
||||
public static class: java.lang.Class<org.nativescript.widgets.Utils>;
|
||||
public static getBitmapFromDrawable(param0: globalAndroid.graphics.drawable.Drawable): globalAndroid.graphics.Bitmap;
|
||||
public static getBitmapFromView(param0: globalAndroid.view.View): globalAndroid.graphics.Bitmap;
|
||||
public static loadImageAsync(param0: globalAndroid.content.Context, param1: string, param2: string, param3: number, param4: number, param5: org.nativescript.widgets.Utils.AsyncImageCallback): void;
|
||||
public static drawBoxShadow(param0: globalAndroid.view.View, param1: string): void;
|
||||
|
||||
@ -7,6 +7,8 @@ import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
@ -70,6 +72,7 @@ public class Utils {
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static Bitmap getBitmapFromView(View view) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
return drawBitmap(view);
|
||||
@ -88,6 +91,28 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static Bitmap getBitmapFromDrawable(Drawable drawable) {
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
return ((BitmapDrawable) drawable).getBitmap();
|
||||
} else {
|
||||
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
Rect previousBounds = null;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
previousBounds = drawable.getBounds();
|
||||
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
|
||||
}
|
||||
|
||||
drawable.draw(canvas);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
drawable.setBounds(previousBounds);
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
}
|
||||
|
||||
public static void drawBoxShadow(View view, String value) {
|
||||
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user