Add default artwork support to SimpleExoPlayerView
Add support for a default artwork image that is displayed if no artwork can be found in the metadata.
This commit is contained in:
parent
163a3a7bb8
commit
eda393ba82
@ -65,6 +65,13 @@ import java.util.List;
|
||||
* <li>Default: {@code true}</li>
|
||||
* </ul>
|
||||
* </li>
|
||||
* <li><b>{@code default_artwork}</b> - Default artwork to use if no artwork available in audio
|
||||
* streams.
|
||||
* <ul>
|
||||
* <li>Corresponding method: {@link #setDefaultArtwork(Bitmap)}</li>
|
||||
* <li>Default: {@code null}</li>
|
||||
* </ul>
|
||||
* </li>
|
||||
* <li><b>{@code use_controller}</b> - Whether playback controls are displayed.
|
||||
* <ul>
|
||||
* <li>Corresponding method: {@link #setUseController(boolean)}</li>
|
||||
@ -179,6 +186,7 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
private SimpleExoPlayer player;
|
||||
private boolean useController;
|
||||
private boolean useArtwork;
|
||||
private Bitmap defaultArtwork;
|
||||
private int controllerShowTimeoutMs;
|
||||
|
||||
public SimpleExoPlayerView(Context context) {
|
||||
@ -194,6 +202,7 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
|
||||
int playerLayoutId = R.layout.exo_simple_player_view;
|
||||
boolean useArtwork = true;
|
||||
int defaultArtwork = 0;
|
||||
boolean useController = true;
|
||||
int surfaceType = SURFACE_TYPE_SURFACE_VIEW;
|
||||
int resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT;
|
||||
@ -205,6 +214,8 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
playerLayoutId = a.getResourceId(R.styleable.SimpleExoPlayerView_player_layout_id,
|
||||
playerLayoutId);
|
||||
useArtwork = a.getBoolean(R.styleable.SimpleExoPlayerView_use_artwork, useArtwork);
|
||||
defaultArtwork = a.getResourceId(R.styleable.SimpleExoPlayerView_default_artwork,
|
||||
defaultArtwork);
|
||||
useController = a.getBoolean(R.styleable.SimpleExoPlayerView_use_controller, useController);
|
||||
surfaceType = a.getInt(R.styleable.SimpleExoPlayerView_surface_type, surfaceType);
|
||||
resizeMode = a.getInt(R.styleable.SimpleExoPlayerView_resize_mode, resizeMode);
|
||||
@ -246,6 +257,9 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
// Artwork view.
|
||||
artworkView = (ImageView) findViewById(R.id.exo_artwork);
|
||||
this.useArtwork = useArtwork && artworkView != null;
|
||||
if (defaultArtwork != 0) {
|
||||
this.defaultArtwork = BitmapFactory.decodeResource(context.getResources(), defaultArtwork);
|
||||
}
|
||||
|
||||
// Subtitle view.
|
||||
subtitleView = (SubtitleView) findViewById(R.id.exo_subtitles);
|
||||
@ -351,6 +365,26 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default artwork to display.
|
||||
*/
|
||||
public Bitmap getDefaultArtwork() {
|
||||
return defaultArtwork;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default artwork to display if {@code useArtwork} is {@code true} and no artwork is
|
||||
* present in the media.
|
||||
*
|
||||
* @param defaultArtwork the default artwork to display.
|
||||
*/
|
||||
public void setDefaultArtwork(Bitmap defaultArtwork) {
|
||||
if (this.defaultArtwork != defaultArtwork) {
|
||||
this.defaultArtwork = defaultArtwork;
|
||||
updateForCurrentTrackSelections();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the playback controls are enabled.
|
||||
*/
|
||||
@ -569,6 +603,9 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (setArtworkFromBitmap(defaultArtwork)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Artwork disabled or unavailable.
|
||||
hideArtwork();
|
||||
@ -580,6 +617,13 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
if (metadataEntry instanceof ApicFrame) {
|
||||
byte[] bitmapData = ((ApicFrame) metadataEntry).pictureData;
|
||||
Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length);
|
||||
return setArtworkFromBitmap(bitmap);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean setArtworkFromBitmap(Bitmap bitmap) {
|
||||
if (bitmap != null) {
|
||||
int bitmapWidth = bitmap.getWidth();
|
||||
int bitmapHeight = bitmap.getHeight();
|
||||
@ -592,8 +636,6 @@ public final class SimpleExoPlayerView extends FrameLayout {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@
|
||||
|
||||
<declare-styleable name="SimpleExoPlayerView">
|
||||
<attr name="use_artwork" format="boolean"/>
|
||||
<attr name="default_artwork" format="reference"/>
|
||||
<attr name="use_controller" format="boolean"/>
|
||||
<attr name="surface_type"/>
|
||||
<attr name="show_timeout"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user