MediaController是如何依附在VideoView上的

2023-11-08 13:30

本文主要是介绍MediaController是如何依附在VideoView上的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很多做视频播放器的朋友们非常想用自带的VideoView来显示视频,用MediaController做为控制视频播放的组件,但是将这两个类全部copy过来之后会出现诸如之下很多问题:
1.“com.android.internal.policy.PolicyManager”是系统隐藏类,不允许在应用程序中直接引用。
   这时候采用反编译方式,骗过系统编译器即可,反编译代码如下。
   public static Window getPolicyWindow(Context context) {
Window window = null;
try {
Class<?> policyManagerClass = Class
.forName("com.android.internal.policy.PolicyManager");
Class<?>[] parMakeNewWindow = { Context.class };
Class<?>[] parConstructor = {};

Method makeNewWindow = policyManagerClass.getDeclaredMethod(
"makeNewWindow", parMakeNewWindow);

Object[] args = { context };
window = (Window) makeNewwindows.invoke(null, args);
} catch (ClassNotFoundException e) {
LogHelper.e(TAG, "getPolicyWindow, ", e);
} catch (NoSuchMethodException e) {
LogHelper.e(TAG, "getPolicyWindow, ", e);
} catch (IllegalAccessException e) {
LogHelper.e(TAG, "getPolicyWindow, ", e);
} catch (InvocationTargetExceptio n e) {
LogHelper.e(TAG, "getPolicyWindow, ", e);
}
return window;
}

2. 视频显示页面VideoView 很明显与 视频播放控制相关按钮MediaController实现了彻底分离,但这两个类是如何协同作用的呢?或者说MediaController是如何依附在VideoView上,并点击其中按钮就能控制VideoView中所播放的视频的播放与暂停呢?

为了更好的解决这个问题,我画了2个时序图,希望能够帮助你理解它们之间的关系(注意其中的注释)。


MediaController是如何依附在VideoView上的


1.       控制组件位于FrameLayout中.

2.       FrameLayout位于Window (通过mWindow.setContentView(this)).

3.       控制组件的显示与隐藏 是通过mDecor对象(就是包含控制组件的View)是否添加到WindowManager中来完成(通过mWindowManager.removeView(mDecor) 或mWindowManager.addView(mDecor)).


两个类的职责:

1.       VideoView功能如下:

(1)       视频容器。 MediaPlayer 的各种Listener在此监听

(2)       控制显示的视频的大小

(3)       控制MediaController中控制组件的显示与否

2.       MediaController功能如下:所有的页面控制逻辑都放置在此

(1)       手势监听(单击,双击等)

(2)       播放,上一首,下一首按钮的功能实现

(3)   SeekBar的更新


注意事项:

  注意VideoView中的onMeasure(int widthMeasureSpec, int heightMeasureSpec);

有时候无法设置全屏显示视频,显示的视频的大小受该方法控制。该方法负责控制SurfaceView的整体大小,视频是被填充在它里面,视频最大也就是SurfaceView的大小。

这篇关于MediaController是如何依附在VideoView上的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/370174

相关文章

阻止tweak依附

http://bbs.iosre.com/t/tweak-app-app-tweak/438

Android基础图形的一些表示方法,SoundPool,VideoView,SurfaceView

##图形的表示方法 位图:由许多点组成的点阵图。构成位图的点称为像素。目前Android中使用的都是位图。(缺点是放大倍数过大,图片质量会失真) 位图大小的计算 1. 单色 = 1位 = 八分之一byte,每个像素占用八分之一byte       200 * 200 / 8 = 5000 2. 2的24次幂色(约1600万) = 24位 = 3byte,每个像素占用3byte       20

机器的依附者

序言     文章还非要有个标题,正文还非要个序言,这是规矩,也是一种束缚,既想打破这种束缚,又想另立一套规矩,恶狼循环。。。     听说你要出差去跪着了。。贵州,说错了,哈哈哈哈哈 序言     1 你以为你知道,其实你不知道     盲人摸象,总是只能看到片面;姜太公钓鱼,愿者上钩;如果信息是单一来源,那么很多东西都会被遗忘,你可能只是站在你的角度思考问题,而你不知道别人面临的问题,你不知

Android - VideoView需要按两次BACK才能退出解决方法

从Android back button and MediaController - Stack Overflow得到启发,开始是个秀才认字认半边,没有把文章和回复看全,然后高版本的Android还是没有解决。后来看到以下回复: The previous solutions no longer work with Android Pie +, you must instead : i

Android 音视频开发 - VideoView

Android 音视频开发 - VideoView 本篇文章主要介绍下Android 中的VideoView. 1: VideoView简介 VideoView是一个用于播放视频的视图组件,可以方便地在应用程序中播放本地或网络上的视频文件。 VideoView可以直接在布局文件中使用,也可以在代码中动态创建。 它封装了MediaPlayer和SurfaceView,提供了简单的接口来控制

关于MediaController的自定义

上一篇博客介绍了videoview和自定义该类,这篇想介绍一下MediaController,本人接触android也就几个月,其中还有一些问题,希望和大家一起进步。 自定义其实就是将android的MediaController源码摘出来,然后对其进行改编定义成自己的类。 摘出来和修改如下: import java.util.Formatter;import java.util.Lo

关于android的VideoView的使用

Android自带了一个VideoView,用来播放视频和网络视频,它是继承SurfaceView使用MediaPlayer来做播放的类。 VideoView使用的一个简单实例: Layout文件: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/

android中多个VideoView切换会黑一下屏的一个方法

在android开发过程中,遇到一个引导页的需求,每个页面都会有一个动画,初始方案是用帧动画来实现,实现过程中发现占用内存过大,进入页面时会有明显的几秒黑屏,并且很可能会引起OOM。 后来决定换成用视频来实现,将动画压缩为视频之后会小很多,占用的内存也小了很多。由于涉及到视频的切换,准备了几个VideoView叠加在一起,在开始时全部设置好URI,当需要切换视频时就让相应的VideoView显示

自定义videoview实现全屏播放

最近的项目中需要横屏播放视频的功能,本来是想通过设置videoview宽高的方式来实现,不过后来发现效果不佳,遂决定自定义一个videoview来解决这个问题。 代码如下: 自定义view: package com.sac.widget;import android.R.integer;import android.content.Context;import android.uti

android 视频播放器 android videoView 按不同比例缩放 .

http://blog.csdn.net/zhangxu365/article/details/7062429 SeeJoPlayer是我利用业余时间开发的一款免费的视频播放器。主要是现在在网上似乎找不到一个Android平台下的界面美观一点的视频播放器。而作为智能手机操作系统的Android,没有一个像样一点的视频播放器,岂不糗大了。所以,我就写了这么一个砖头并开出源码,希望能引出高手们的美玉