public void start() {
if (isInPlaybackState()) {
mMediaPlayer.start();
mCurrentState = STATE_PLAYING;
}
mTargetState = STATE_PLAYING;
}
通过下面几个关键的函数可以看出,VideoView播放播放视频是通过SurfaceView(VideoView本身就是SurfaceView)加上MediaPlayer(VideoView封装该类)这个类来推动的。这只是前面要讲的第三种播放视频的方法------------使用MediaPlayer和SurfaceView定制自己的视频播放器。
看一下MediaController这个类

它是一个视图,VideoView通过setMediaController(MediaControllercontroller)函数添加MediaController其实就是添加一个视图,该视口容器里有控件来控制视频的播放
public void setMediaController(MediaController controller) {
if (mMediaController != null) {
mMediaController.hide();
}
mMediaController = controller;
attachMediaController();
}
private void attachMediaController() {
if (mMediaPlayer != null && mMediaController != null) {
mMediaController.setMediaPlayer(this);
View anchorView = this.getParent() instanceof View ?
(View)this.getParent() : this;
mMediaController.setAnchorView(anchorView);
mMediaController.setEnabled(isInPlaybackState());
}
}
看一下Mediacontroller的源码,路径在frameworks/base/core/java/android/widget/MediaController.java
public void setAnchorView(View view) {
if (mAnchor != null) {
mAnchor.removeOnLayoutChangeListener(mLayoutChangeListener);
}
mAnchor = view;
if (mAnchor != null) {
mAnchor.addOnLayoutChangeListener(mLayoutChangeListener);
}
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
removeAllViews();
View v = makeControllerView();
addView(v, frameParams);
}
/**
* Create the view that holds the widgets that control playback.
* Derived classes can override this to create their own.
* @return The controller view.
* @hide This doesn't work as advertised
*/
protected View makeControllerView() {
LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mRoot = inflate.inflate(com.android.internal.R.layout.media_controller, null);
initControllerView(mRoot);
return mRoot;
}
看一下它的布局结构
frameworks/base/core/res/res/layout/media_controller.xml
上面两个类的源码就没有详细剖析了。
关于VideoView播放视频就讲那些了,demo是运行在真机上的。
后面文章讲一下使用MediaPlayer和SurfaceView来播放视频。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-123742-3.html
有利于彻底根治