surfaceview+mediaplayer

上传者: wufeiqing | 上传时间: 2025-07-06 11:51:35 | 文件大小: 5.39MB | 文件类型: RAR
在Android开发中,`SurfaceView` 和 `MediaPlayer` 是两个重要的组件,它们常被用于实现视频播放功能。`SurfaceView` 提供了一个高效的显示机制,适用于处理大量的图形更新,而`MediaPlayer` 则是Android系统提供的媒体播放器,能够处理各种音频和视频格式的播放。在本篇文章中,我们将深入探讨如何利用`SurfaceView` 和 `MediaPlayer` 控制视频的大小,以适应不同的屏幕尺寸和用户体验需求。 让我们了解`SurfaceView`。`SurfaceView` 是一个特殊的视图,它拥有自己的显示表面,可以独立于窗口管理器进行渲染,这使得它在处理多媒体数据时能够避免频繁的界面刷新带来的性能损失。在播放视频时,`SurfaceView` 的优点在于能够减少画面撕裂,提高播放流畅性。 `MediaPlayer` 类是Android的媒体播放引擎,它可以加载、解码和播放音频和视频文件。`MediaPlayer` 支持多种媒体源,包括本地文件、网络流和内容提供者的URI。对于视频播放,我们通常会将`MediaPlayer`与`SurfaceView` 结合使用,通过`MediaPlayer`加载和解码视频,然后在`SurfaceView`上显示。 要控制视频大小,我们需要关注以下几个关键步骤: 1. 创建`SurfaceView`: 在布局文件中添加`SurfaceView`,并将其ID设为`SurfaceHolder.Callback` 的引用,以便在`SurfaceView`准备就绪时接收通知。 2. 实现`SurfaceHolder.Callback`: 在Activity或Fragment中实现此接口,重写`surfaceCreated()`, `surfaceChanged()` 和 `surfaceDestroyed()` 方法。`surfaceChanged()`方法会在Surface尺寸变化时调用,我们可以在这里调整`MediaPlayer`的视频显示大小。 3. 初始化`MediaPlayer`: 使用`MediaPlayer.create()` 或者手动构造`MediaPlayer`对象,然后设置数据源(例如,本地文件路径)。调用`setDisplay()`方法,将`SurfaceView`的`SurfaceHolder`传递给`MediaPlayer`,使视频能够在`SurfaceView`上显示。 4. 调整视频大小:在`surfaceChanged()`方法中,获取`SurfaceView`的新尺寸,然后调用`MediaPlayer`的`setVideoSize()`方法,传入对应的宽度和高度参数。这样,`MediaPlayer`就会按照指定的尺寸播放视频。 5. 播放和控制:调用`MediaPlayer`的`prepare()`方法准备播放,然后通过`start()`开始播放。还可以利用`seekTo()`跳转到视频的任意位置,`pause()`暂停,`stop()`停止,`release()`释放资源。 6. 处理播放结束:监听`MediaPlayer`的`OnCompletionListener`,当视频播放完毕时,可以选择重新播放或执行其他操作。 7. 注意兼容性:不同设备的屏幕尺寸和分辨率各不相同,因此在设置视频大小时要考虑兼容性问题。可以使用`DisplayMetrics`获取设备的屏幕尺寸,并根据需要进行适配。 通过`SurfaceView`和`MediaPlayer`的组合,开发者可以实现自定义的视频播放功能,包括控制视频的大小以适应不同的屏幕。这不仅提高了用户体验,还为应用提供了更大的灵活性。在实际开发过程中,还需要考虑性能优化和异常处理,确保在各种情况下都能稳定地播放视频。

文件下载

资源详情

[{"title":"( 46 个子文件 5.39MB ) surfaceview+mediaplayer","children":[{"title":"MainActivity","children":[{"title":"bin","children":[{"title":"classes.dex <span style='color:#111;'> 801.20KB </span>","children":null,"spread":false},{"title":"res","children":[{"title":"crunch","children":[{"title":"drawable-hdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 5.91KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-xhdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 9.30KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-xxhdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 17.62KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-mdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 3.12KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true},{"title":"dexedLibs","children":[{"title":"android-support-v4-f82834f8771e54d29564f96157d8e582.jar <span style='color:#111;'> 267.35KB </span>","children":null,"spread":false}],"spread":true},{"title":"classes","children":[{"title":"com","children":[{"title":"thomas","children":[{"title":"surfaceviewbackground","children":[{"title":"MainActivity.class <span style='color:#111;'> 4.56KB </span>","children":null,"spread":false},{"title":"BuildConfig.class <span style='color:#111;'> 373B </span>","children":null,"spread":false},{"title":"MainActivity$1.class <span style='color:#111;'> 984B </span>","children":null,"spread":false},{"title":"MainActivity$SurfaceViewLis.class <span style='color:#111;'> 1.85KB </span>","children":null,"spread":false},{"title":"R$layout.class <span style='color:#111;'> 445B </span>","children":null,"spread":false},{"title":"R$id.class <span style='color:#111;'> 431B </span>","children":null,"spread":false},{"title":"R$drawable.class <span style='color:#111;'> 449B </span>","children":null,"spread":false},{"title":"R$dimen.class <span style='color:#111;'> 503B </span>","children":null,"spread":false},{"title":"R$attr.class <span style='color:#111;'> 382B </span>","children":null,"spread":false},{"title":"R.class <span style='color:#111;'> 753B </span>","children":null,"spread":false},{"title":"R$string.class <span style='color:#111;'> 514B </span>","children":null,"spread":false},{"title":"R$style.class <span style='color:#111;'> 473B </span>","children":null,"spread":false}],"spread":false}],"spread":true}],"spread":true}],"spread":true},{"title":"resources.ap_ <span style='color:#111;'> 1.04MB </span>","children":null,"spread":false},{"title":"MainActivity.apk <span style='color:#111;'> 1.31MB </span>","children":null,"spread":false},{"title":"AndroidManifest.xml <span style='color:#111;'> 924B </span>","children":null,"spread":false}],"spread":true},{"title":"res","children":[{"title":"drawable-ldpi","children":null,"spread":false},{"title":"drawable-hdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 7.51KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-xhdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 12.24KB </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-xxhdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 24.15KB </span>","children":null,"spread":false}],"spread":true},{"title":"values","children":[{"title":"strings.xml <span style='color:#111;'> 231B </span>","children":null,"spread":false},{"title":"styles.xml <span style='color:#111;'> 651B </span>","children":null,"spread":false},{"title":"dimens.xml <span style='color:#111;'> 213B </span>","children":null,"spread":false}],"spread":true},{"title":"drawable-mdpi","children":[{"title":"ic_launcher.png <span style='color:#111;'> 3.71KB </span>","children":null,"spread":false}],"spread":true},{"title":"layout","children":[{"title":"activity_main.xml <span style='color:#111;'> 374B </span>","children":null,"spread":false}],"spread":true},{"title":"values-w820dp","children":[{"title":"dimens.xml <span style='color:#111;'> 373B </span>","children":null,"spread":false}],"spread":true}],"spread":true},{"title":"proguard-project.txt <span style='color:#111;'> 781B </span>","children":null,"spread":false},{"title":"ic_launcher-web.png <span style='color:#111;'> 50.40KB </span>","children":null,"spread":false},{"title":"assets","children":[{"title":"video.mp4 <span style='color:#111;'> 1.01MB </span>","children":null,"spread":false}],"spread":true},{"title":"gen","children":[{"title":"com","children":[{"title":"thomas","children":[{"title":"surfaceviewbackground","children":[{"title":"BuildConfig.java <span style='color:#111;'> 174B </span>","children":null,"spread":false},{"title":"R.java <span style='color:#111;'> 2.03KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":".DS_Store <span style='color:#111;'> 6.00KB </span>","children":null,"spread":false},{"title":".settings","children":[{"title":"org.eclipse.jdt.core.prefs <span style='color:#111;'> 177B </span>","children":null,"spread":false}],"spread":true},{"title":"src","children":[{"title":"com","children":[{"title":"thomas","children":[{"title":"surfaceviewbackground","children":[{"title":"MainActivity.java <span style='color:#111;'> 3.06KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}],"spread":true},{"title":".project <span style='color:#111;'> 848B </span>","children":null,"spread":false},{"title":".classpath <span style='color:#111;'> 475B </span>","children":null,"spread":false},{"title":"project.properties <span style='color:#111;'> 607B </span>","children":null,"spread":false},{"title":"readme","children":[{"title":"me.jpg <span style='color:#111;'> 84.75KB </span>","children":null,"spread":false},{"title":"SurfaceBackground.gif <span style='color:#111;'> 726.28KB </span>","children":null,"spread":false}],"spread":true},{"title":"README.md <span style='color:#111;'> 183B </span>","children":null,"spread":false},{"title":"AndroidManifest.xml <span style='color:#111;'> 924B </span>","children":null,"spread":false},{"title":"libs","children":[{"title":"android-support-v4.jar <span style='color:#111;'> 740.94KB </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明