surfaceview+mediaplayer实现视频播放和动态设置全屏窗口切换。
在Android应用开发中,SurfaceView和MediaPlayer是两个关键组件,常用于实现视频播放功能。SurfaceView是一个特殊的视图,它可以创建一个独立的图形表面,使得视频渲染和其他UI操作可以并行进行,避免了UI线程阻塞,提升了用户体验。MediaPlayer则是Android系统提供的媒体播放器,支持多种音频和视频格式的播放。 1. SurfaceView的理解与应用: SurfaceView是由两部分组成的:Surface和View。Surface是实际渲染视频帧的地方,而View则负责处理触摸事件和布局管理。在SurfaceView中,视频的渲染发生在单独的硬件层面上,这样可以避免因为视频渲染导致的主线程阻塞,从而保持UI的流畅性。开发者通常需要创建一个SurfaceHolder对象,用来监听Surface的创建、改变和销毁事件,以便在合适的时机调用MediaPlayer的setDisplay()方法来绑定Surface。 2. MediaPlayer的使用: MediaPlayer是一个强大的类,可以用来播放本地或网络上的音频和视频资源。你需要通过create()方法初始化一个MediaPlayer对象,然后调用setDataSource()指定要播放的媒体文件路径(如m3u8流)。接着,调用prepare()或prepareAsync()来准备播放。如果是网络资源,推荐使用prepareAsync()进行异步准备,因为它可以在后台完成,不会阻塞UI。调用start()来启动播放。 3. 动态设置View的宽高: 在布局文件中,可以通过设置SurfaceView的layout_width和layout_height属性来确定其大小。然而,在运行时,可能需要根据需求动态调整。这可以通过设置LayoutParams并调用requestLayout()来实现。例如,如果你想在点击全屏按钮时切换到全屏模式,你可以将SurfaceView的宽度和高度设置为父容器的宽度和高度。 4. 全屏窗口切换: 要实现在非全屏和全屏之间的切换,首先需要在布局文件中为全屏模式准备一个备用布局。在用户触发全屏操作时,可以使用ViewGroup的removeView()和addView()方法将SurfaceView从当前布局移除并添加到全屏布局。同时,调整SurfaceView的尺寸以适应新的屏幕大小,并确保所有关联的触摸事件和播放状态能够正确处理。 5. 遇到的问题与解决策略: 在实现这个功能时,可能会遇到如缓冲问题、播放错误、屏幕旋转后播放异常等问题。对于缓冲问题,可以优化网络请求或使用预加载策略;对于播放错误,需要检查媒体文件路径是否正确,以及MediaPlayer的状态是否允许执行特定操作;屏幕旋转时,可能需要保存和恢复MediaPlayer的状态,或者重新初始化SurfaceView和MediaPlayer。 6. 示例代码: 提供的文件“MediaPlayer”可能是包含示例代码的Java类。在这个类中,你可能看到如何初始化SurfaceView,如何创建和配置MediaPlayer,以及如何处理全屏切换的逻辑。分析这段代码可以帮助你更好地理解这些概念。 SurfaceView和MediaPlayer的结合使用是Android实现高效视频播放的常见方案,而动态调整View尺寸和全屏切换是提升用户体验的重要手段。理解并熟练运用这些技术,可以构建出高质量的视频播放应用。
- 1
- 唯爱丶梦2018-04-12不错,挺好的!
- lijiews3602019-04-29哎呦 不错呦
- emacs2019-04-19最最简单的一个程序 简直了
- 粉丝: 26
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Power Quality Disturbance:基于MATLAB Simulink的各种电能质量扰动仿真模型,包括配电线路故障、感应电机启动、变压器励磁、单相 三相非线性负载等模型,可用于模拟各种
- 教务管理系统(jsp+servlet+mysql)130225.rar
- 教务管理系统(jsp+servlet+mysql).rar
- 酒店订单管理系统(Jsp+servlet+mysql)130224.rar
- 酒店订单管理系统(Jsp+servlet+mysql).rar
- 乐趣大型购物系统 v1.1(jsp+servlet+mysql).rar
- 聊天系统(java+applet)130227.rar
- 龙门物流管理系统(Ext+SSH).rar
- 乐趣大型购物系统 v1.1(jsp+servlet+mysql)130223.rar
- 基于动态窗口算法的AGV仿真避障 可设置起点目标点,设置地图,设置移动障碍物起始点目标点,未知静态障碍物 动态窗口方法(DynamicWindowApproach) 是一种可以实现实时避障的局部规划算
- 内容管理系统(hibernate3+struts2+spring2).rar
- 内容管理系统(hibernate3+struts2+spring2)130224.rar
- 企业费用管理系统(SSH+Oracle).rar
- 企业费用管理系统(SSH+Oracle)130222.rar
- 企业级新闻系统(SSH+MYSQL).rar
- 通用的在线考试系统(jsp+struts+hibernate+oracle).rar