MediaController是如何依附在VideoView上的
1个回答
展开全部
这时候采用反编译方式,骗过系统编译器即可,反编译代码如下。 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 (InvocationTargetException e) {LogHelper.e(TAG, "getPolicyWindow, ", e);}return window;}2. 视频显示页面VideoView 很明显与视频播放控制相关按钮MediaController实现了彻底分离,但这两个类是如何协同作用的呢?或者说MediaController是如何依附在VideoView上,并点击其中按钮就能控制VideoView中所播放的视频的播放与暂停呢?为了更好的解决这个问题,我画了2个时序图,希望能够帮助你理解它们之间的关系(注意其中的注释)。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的整体大小
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询