Android播放视频之VideoView(3)

电脑杂谈  发布时间:2019-09-22 12:02:57  来源:网络整理
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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...