From 1f1762538fe0a2953fc464c6f23f2f588a687559 Mon Sep 17 00:00:00 2001 From: Jovche Mitrejchevski Date: Tue, 24 Jul 2018 08:16:53 +0200 Subject: [PATCH] Support vector drawables to be used as default artwork --- .../android/exoplayer2/ui/PlayerView.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java index e8d5e48927..87fd09771e 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java @@ -22,10 +22,15 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -368,7 +373,7 @@ public class PlayerView extends FrameLayout { artworkView = findViewById(R.id.exo_artwork); this.useArtwork = useArtwork && artworkView != null; if (defaultArtworkId != 0) { - defaultArtwork = BitmapFactory.decodeResource(context.getResources(), defaultArtworkId); + defaultArtwork = loadFromResource(defaultArtworkId); } // Subtitle view. @@ -416,6 +421,21 @@ public class PlayerView extends FrameLayout { hideController(); } + private Bitmap loadFromResource(int defaultArtworkId) { + Drawable drawable = ContextCompat.getDrawable(getContext(), defaultArtworkId); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + drawable = (DrawableCompat.wrap(drawable)).mutate(); + } + + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + + return bitmap; + } + /** * Switches the view targeted by a given {@link Player}. *