VideoView

public class VideoView
extends ViewGroup

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ androidx.media2.widget.VideoView


A high level view for media playbacks that can be integrated with either a SessionPlayer or a MediaController. Developers can easily implement a video rendering application using this class.

For simple use cases not requiring communication with MediaSession, apps need to create a SessionPlayer (e.g. MediaPlayer) and set it to this view by calling setPlayer(SessionPlayer). For more advanced use cases that require MediaSession (e.g. handling media key events, integrating with other MediaSession apps as Assistant), apps need to create a MediaController attached to the MediaSession and set it to this view by calling setMediaController(MediaController).

View type can be selected : VideoView can render videos on top of TextureView as well as SurfaceView selectively. The default is SurfaceView and it can be changed using setViewType(int) method. Using SurfaceView is recommended in most cases for saving battery. TextureView might be preferred for supporting various UIs such as animation and translucency.

Differences between android.widget.VideoView class : VideoView covers and inherits the most of android.widget.VideoView's functionality. The main differences are

Displaying metadata : VideoView supports displaying metadata for music by calling MediaItem.setMetadata(MediaMetadata). Currently supported metadata are MediaMetadata.METADATA_KEY_TITLE, MediaMetadata.METADATA_KEY_ARTIST, and MediaMetadata.METADATA_KEY_ALBUM_ART. If values for these keys are not set, the following default values will be shown, respectively: R.string.mcv2_music_title_unknown_text R.string.mcv2_music_artist_unknown_text R.drawable.ic_default_album_image

Note: VideoView does not retain its full state when going into the background. In particular, it does not restore the current play state, play position, selected tracks. Applications should save and restore these on their own in Activity.onSaveInstanceState(Bundle) and Activity.onRestoreInstanceState(Bundle). R.attr.enableControlView R.attr.viewType

Summary

Nested classes

interface VideoView.OnViewTypeChangedListener

Interface definition of a callback to be invoked when the view type has been changed. 

Constants

int VIEW_TYPE_SURFACEVIEW

Indicates video is rendering on SurfaceView.

int VIEW_TYPE_TEXTUREVIEW

Indicates video is rendering on TextureView.

Inherited constants

Inherited fields

Public constructors

VideoView(Context context)
VideoView(Context context, AttributeSet attrs)
VideoView(Context context, AttributeSet attrs, int defStyleAttr)

Public methods

ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs)
CharSequence getAccessibilityClassName()
MediaControlView getMediaControlView()

Returns MediaControlView instance which is currently attached to VideoView by default or by setMediaControlView(MediaControlView, long) method.

int getViewType()

Returns view type.

void setMediaControlView(MediaControlView mediaControlView, long intervalMs)

Sets MediaControlView instance.

void setMediaController(MediaController controller)

Sets MediaController to display media content.

void setOnViewTypeChangedListener(VideoView.OnViewTypeChangedListener listener)

Sets a listener to be called when a view type change is done.

void setPlayer(SessionPlayer player)

Sets SessionPlayer to display media content.

void setViewType(int viewType)

Selects which view will be used to render video between SurfaceView and TextureView.

boolean shouldDelayChildPressedState()

Protected methods

boolean checkLayoutParams(ViewGroup.LayoutParams p)
ViewGroup.LayoutParams generateDefaultLayoutParams()
ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp)
void onAttachedToWindow()
void onDetachedFromWindow()
void onLayout(boolean changed, int left, int top, int right, int bottom)
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

Inherited methods

Constants

VIEW_TYPE_SURFACEVIEW

public static final int VIEW_TYPE_SURFACEVIEW

Indicates video is rendering on SurfaceView.

See also:

Constant Value: 0 (0x00000000)

VIEW_TYPE_TEXTUREVIEW

public static final int VIEW_TYPE_TEXTUREVIEW

Indicates video is rendering on TextureView.

See also:

Constant Value: 1 (0x00000001)

Public constructors

VideoView

public VideoView (Context context)

Parameters
context Context

VideoView

public VideoView (Context context, 
                AttributeSet attrs)

Parameters
context Context

attrs AttributeSet

VideoView

public VideoView (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

Parameters
context Context

attrs AttributeSet

defStyleAttr int

Public methods

generateLayoutParams

public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)

Parameters
attrs AttributeSet

Returns
ViewGroup.LayoutParams

getAccessibilityClassName

public CharSequence getAccessibilityClassName ()

Returns
CharSequence

getMediaControlView

public MediaControlView getMediaControlView ()

Returns MediaControlView instance which is currently attached to VideoView by default or by setMediaControlView(MediaControlView, long) method.

Returns
MediaControlView

getViewType

public int getViewType ()

Returns view type.

Returns
int view type. See .

setMediaControlView

public void setMediaControlView (MediaControlView mediaControlView, 
                long intervalMs)

Sets MediaControlView instance. It will replace the previously assigned MediaControlView instance if any.

If a MediaController or a SessionPlayer instance has been set to VideoView, the same instance will be set to MediaControlView.

Parameters
mediaControlView MediaControlView: a MediaControlView instance.

intervalMs long: time interval in milliseconds until MediaControlView transitions into a different mode. -1 can be set to disable all UI transitions. See MediaControlView Javadoc Section "UI transitions" for details.

setMediaController

public void setMediaController (MediaController controller)

Sets MediaController to display media content. Setting a MediaController will unset any MediaController or SessionPlayer that was previously set.

If VideoView has a MediaControlView instance, this controller will also be set to it.

Parameters
controller MediaController: the controller

setOnViewTypeChangedListener

public void setOnViewTypeChangedListener (VideoView.OnViewTypeChangedListener listener)

Sets a listener to be called when a view type change is done.

Parameters
listener VideoView.OnViewTypeChangedListener: The listener to be called. A value of null removes any existing listener.

See also:

setPlayer

public void setPlayer (SessionPlayer player)

Sets SessionPlayer to display media content. Setting a SessionPlayer will unset any MediaController or SessionPlayer that was previously set.

If VideoView has a MediaControlView instance, this player will also be set to it.

Parameters
player SessionPlayer: the player

setViewType

public void setViewType (int viewType)

Selects which view will be used to render video between SurfaceView and TextureView.

Note: There are two known issues on API level 28+ devices.

  • When changing view type to SurfaceView from TextureView in "paused" playback state, a blank screen can be shown.
  • When changing view type to TextureView from SurfaceView repeatedly in "paused" playback state, the lastly rendered frame on TextureView can be shown.

Parameters
viewType int: the view type to render video

shouldDelayChildPressedState

public boolean shouldDelayChildPressedState ()

Returns
boolean

Protected methods

checkLayoutParams

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams

Returns
boolean

generateDefaultLayoutParams

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

Returns
ViewGroup.LayoutParams

generateLayoutParams

protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams lp)

Parameters
lp ViewGroup.LayoutParams

Returns
ViewGroup.LayoutParams

onAttachedToWindow

protected void onAttachedToWindow ()

onDetachedFromWindow

protected void onDetachedFromWindow ()

onLayout

protected void onLayout (boolean changed, 
                int left, 
                int top, 
                int right, 
                int bottom)

Parameters
changed boolean

left int

top int

right int

bottom int

onMeasure

protected void onMeasure (int widthMeasureSpec, 
                int heightMeasureSpec)

Parameters
widthMeasureSpec int

heightMeasureSpec int