Android编程实现播放视频的方法示例

作者:dodo-yufan 时间:2023-04-20 06:34:17 

本文实例讲述了Android编程实现播放视频的方法。分享给大家供大家参考,具体如下:

播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView 类来实现的。这个 类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。 VideoView 的用法和 MediaPlayer 也比较类似,主要有以下常用方法:

方法名

功能描述

setVideoPath()

设置要播放的视频文件的位置。

start()

开始或继续播放视频。

pause()

暂停播放视频。

resume()

将视频重头开始播放。

seekTo()

从指定的位置开始播放视频。

isPlaying()

判断当前是否正在播放视频。

getDuration()

获取载入的视频文件的时长。

那么我们还是通过一个实际的例子来学习一下吧,新建 PlayVideoTest 项目,然后修改activity_main.xml 中的代码,如下所示:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" >
<VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" >
<Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Play" />
<Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Pause" />
<Button android:id="@+id/replay" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Replay" />
</LinearLayout>
</LinearLayout>

在这个布局文件中,首先是放置了一个 VideoView,稍后的视频就将在这里显示。然后在 VideoView 的下面又放置了三个按钮,分别用于控制视频的播放、暂停和重新播放。 接下来修改 MainActivity 中的代码,如下所示:


public class MainActivity extends Activity implements OnClickListener {
private VideoView videoView;
private Button play; private Button pause; private Button replay;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
replay = (Button) findViewById(R.id.replay);
videoView = (VideoView) findViewById(R.id.video_view); play.setOnClickListener(this); pause.setOnClickListener(this); replay.setOnClickListener(this);
initVideoPath();
}
private void initVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(), "movie.3gp");
videoView.setVideoPath(file.getPath()); // 指定视频文件的路径
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
if (!videoView.isPlaying()) {
videoView.start(); // 开始播放
}
break;
case R.id.pause:
if (videoView.isPlaying()) {
videoView.pause(); // 暂时播放
}
break;
case R.id.replay:
if (videoView.isPlaying()) {
videoView.resume(); // 重新播放
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (videoView != null) {
videoView.suspend();
}
}
}

这部分代码相信你理解起来会很轻松,因为它和前面播放音频的代码非常类似。首先在 onCreate()方法中仍然是去获取一些控件的实例,然后调用了 initVideoPath()方法来设置视频 文件的路径,这里我们需要事先在 SD 卡的根目录下放置一个名为 movie.3gp 的视频文件。 下面看一下各个按钮的点击事件中的代码。当点击 Play 按钮时会进行判断,如果当前 并没有正在播放音频,则调用 start()方法开始播放。当点击 Pause 按钮时会判断,如果当前 视频正在播放,则调用 pause()方法暂时播放。当点击 Replay 按钮时会判断,如果当前视频正在播放,则调用 resume()方法重头播放视频。最后在 onDestroy()方法中,我们还需要调用一下 suspend()方法,将 VideoView 所占用的 资源释放掉。

现在将程序运行到手机上,然后点击一下 Play 按钮,就可以看到视频已经开始播放了, 如下图所示:

Android编程实现播放视频的方法示例

点击 Pause 按钮可以暂停视频的播放,点击 Replay 按钮可以重头播放视频。 这样的话,你就已经将 VideoView 的基本用法掌握得差不多了。不过,为什么它的用法

和 MediaPlayer 这么相似呢?其实 VideoView 只是帮我们做了一个很好的封装而已,它的背 后仍然是使用 MediaPlayer 来对视频文件进行控制的。另外需要注意,VideoView 并不是一 个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。所 以,如果想要仅仅使用 VideoView 就编写出一个功能非常强大的视频播放器是不太现实的。 但是如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用 VideoView 还 是绰绰有余的。

希望本文所述对大家Android程序设计有所帮助。

标签:Android,播放,视频
0
投稿

猜你喜欢

  • C#中TreeView节点的自定义绘制方法

    2023-04-01 10:37:19
  • Spring-Cloud Eureka注册中心实现高可用搭建

    2023-06-18 03:02:25
  • SpringBootTest单元测试报错的解决方案

    2021-09-08 23:25:47
  • Android打包篇:Android Studio将代码打包成jar包教程

    2022-08-14 06:22:20
  • 一篇文章彻底弄懂Java中二叉树

    2023-04-08 12:47:30
  • Redis在springboot中的使用教程

    2021-10-02 18:10:46
  • java微信支付接入流程详解

    2023-07-28 18:37:46
  • C# ComboBox控件“设置 DataSource 属性后无法修改项集合”的完美解决方法

    2023-01-30 04:11:58
  • 一文搞懂MyBatis多数据源Starter实现

    2023-07-19 03:34:22
  • 详解Java8与Runtime.getRuntime().availableProcessors()

    2023-01-04 18:17:06
  • MyBatis框架之mybatis逆向工程自动生成代码

    2023-01-11 06:19:18
  • Spring 报错:元素 "context:component-scan" 的前缀 "context" 未绑定的问题解决

    2023-09-10 07:45:34
  • Android开发中requestfocus()无效的原因及解决办法

    2023-05-25 07:15:00
  • Spring Boot 2.X快速整合jpa过程解析

    2021-09-22 15:27:29
  • C# 创建高精度定时器的示例

    2023-03-09 12:35:58
  • mybatis自定义类型处理器TypehHandler示例详解

    2023-10-11 04:30:40
  • Android Studio连接SQLite数据库的登录注册实现

    2023-08-14 11:27:49
  • Java接口中尽量避免使用数组

    2022-07-06 23:24:14
  • c#语言程序构建基块

    2023-04-11 22:40:12
  • spring AOP的Around增强实现方法分析

    2021-10-03 06:22:39
  • asp之家 软件编程 m.aspxhome.com