作者:刘昊昱

博客:http://blog.csdn.net/liuhaoyutz

在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频。

一、使用VideoView类播放视频

要使用VideoView类播放视频,首先要在布局文件中添加VideoView组件,然后在Activity中获取该组件,并使用VideoView.setVideoPath()或VideoView.setVideoURI()方法加载需要播放的视频,最后调用start()方法播放视频。VideoView类还提供了stop()和pause()方法,用于停止或暂停视频播放。

在布局文件中添加VideoView组件的基本语法格式如下:

<VideoView

属性列表>

</VideoView>

Android还提供了一个与VideoView组件结合使用的MediaController组件。MediaController组件用于通过图形控制界面来控制视频的播放。

下面我们来看一个使用VideoView和MediaController组件播放视频的例子,由于在模拟器上播放不了视频,所以这里就不上图了,我在真机上验证过可以播放视频,直接看代码:

先来看主布局文件main.xml,其内容如下:

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <VideoView
android:id="@+id/video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" /> </LinearLayout>

下面看主Activity文件,其内容如下:

package com.liuhaoyu;

import java.io.File;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView; public classMainActivity extends Activity {
private VideoView video; /** Called when the activity is firstcreated. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); video=(VideoView) findViewById(R.id.video);
File file=new File("/sdcard/1.mp4");
MediaController mc=newMediaController(MainActivity.this); // 创建一个MediaController对象
if(file.exists()){
video.setVideoPath(file.getAbsolutePath());
video.setMediaController(mc); // 将VideoView与MediaController关联起来
video.requestFocus(); // 设置VideoView获取焦点
try {
video.start(); // 播放视频
}catch(Exception e) {
e.printStackTrace();
} // 设置VideoView的Completion事件监听器
video.setOnCompletionListener(new OnCompletionListener(){
@Override
public voidonCompletion(MediaPlayer mp) {
Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
}
});
}else{
Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
}
}
}

二、 使用MediaPlayer播放视频

MediaPlayer不但可以播放音乐,也可以播放视频,但是MediaPlayer没有提供视频输出界面,所以,用MediaPlayer播放视频需要和SurfaceView组件配合使用,其主要流程如下:

(1)、在布局文件中插入SurfaceView组件,其语法格式如下:

<SurfaceView

android:id=”@+id/ID号”

android:background=”背景”

android:keepScreenOn=”true|false”

android:layout_width=”宽度”

android:layout_height=”高度” />

(2)、创建MediaPlayer对象,并加载要播放的视频。加载视频的方法和上一篇文章中介绍的加载音频的方法一样,这里不再详述。

(3)、将视频画面输出到SurfaceView,语法格式如下:

MediaPlayer.setDisplay(SurfaceHolder sh)

参数sh用于指定SurfaceHolder对象,可以通过SurfaceView.getHolder()方法获得。

(4)、调用MediaPlayer的play()、stop()、pause()等方法控制视频播放。

下面来看一个例子:

先来看主布局文件,其内容如下:

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" > <SurfaceView
android:id="@+id/surfaceView1"
android:keepScreenOn="true"
android:layout_width="576px"
android:layout_height="432px"/> <LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" > <Button
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放" /> <Button
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="暂停" /> <Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止" />
</LinearLayout> </LinearLayout>

下面我们看主Activity文件,其内容如下:

package com.liuhaoyu;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; public classMainActivity extends Activity {
private MediaPlayer mp;
private SurfaceView sv;
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp=new MediaPlayer();
sv=(SurfaceView)findViewById(R.id.surfaceView1);
Button play=(Button)findViewById(R.id.play);
final Button pause=(Button)findViewById(R.id.pause);
Button stop=(Button)findViewById(R.id.stop); play.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
mp.reset();
try {
mp.setDataSource("/sdcard/1.mp4");
mp.setDisplay(sv.getHolder());
mp.prepare();
mp.start();
pause.setText("暂停");
pause.setEnabled(true);
}catch(IllegalArgumentException e) {
e.printStackTrace();
}catch(SecurityException e) {
e.printStackTrace();
}catch(IllegalStateException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
} }
}); stop.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.stop();
pause.setEnabled(false);
} }
}); pause.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.pause();
((Button)v).setText("继续");
}else{
mp.start();
((Button)v).setText("暂停");
} }
}); mp.setOnCompletionListener(new OnCompletionListener(){ @Override
public voidonCompletion(MediaPlayer mp) {
Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
}
}); }
@Override
protected void onDestroy() {
if(mp.isPlaying()){
mp.stop();
}
mp.release();
super.onDestroy();
} }

Android应用开发学习笔记之播放视频的更多相关文章

  1. Android应用开发学习笔记之播放音频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...

  2. android移动开发学习笔记(二)神奇的Web API

    本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice ...

  3. Android应用开发学习笔记之事件处理

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...

  4. Android应用开发学习笔记之Intent

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Intent是什么呢?来看Android官网上的定义: An intent is an abstractdescri ...

  5. Android应用开发学习笔记之AsyncTask

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...

  6. Android应用开发学习笔记之BroadcastReceiver

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 一.BroadcastReceiver机制概述 Broadcast Receiver是Android的一种“广播发布 ...

  7. Android应用开发学习笔记之ContentProvider

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz ContentProvider用于为其它应用程序提供共享数据,它为不同应用程序间共享数据提供了统一的操作接口. 一. ...

  8. [Android游戏开发学习笔记]View和SurfaceView

    本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...

  9. Android应用开发学习笔记之Fragment

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Fragment翻译成中文就是“碎片”.“片断”的意思,Fragment通常用来作为一个Activity用户界面的一 ...

随机推荐

  1. First_1

    #region 练习题 1.4 (1) ///*求一个N阶方阵所有原素的和.(改进:二维数组的大小可以自己输入)*/ //Console.WriteLine("请输入i和j的值:" ...

  2. JFinal教程1——小白的第一个JFinal程序

    为了使小白能够完全的按步骤创建第一个JFinal应用并运行,笔者将以Java界最流行的Eclipse平台为例,搭建出所有基础教程中喜欢的Hello world应用. 1. JFinal简介 2. 小白 ...

  3. IOS SWIFT UITableView 实现简单微博列表

    // // Weibo.swift // UITableViewCellExample // // Created by XUYAN on 15/8/15. // Copyright (c) 2015 ...

  4. LVS集群的体系结构

    2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...

  5. 二、Nginx变量

    $arg_PARAMETER 功能:如果在请求中设置了查询字符串,那么这个变量包含在查询字符串是GET请求PARAMETER中的值. $args 功能:该变量的值是GET请求在请求行中的参数. $bi ...

  6. 简要解析XMPP框架及iOS-Objective-C的使用

    前言:这两天看了XMPP框架,查阅了一些资料,写下这篇文章记录一下学习笔记 一.简要解析XMPP核心部分 XMPP框架分为两个部分 1.核心部分 2.扩展部分 扩展部分主要讲好友列表(roster). ...

  7. pycURL的内存问题

    pycURL的内存问题 最近用pycURL写了一个工具,注册账号用的.写是写好了,但是发现内存占用超大.40个线程运行一天跑到了3.7G的内存. 于是着手调查这个问题. 调查方法就是用python的g ...

  8. 创建成功的Python项目

    创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects ...

  9. 通过DWR简化AJAX开发

    DWR(Direct Web Remoting)是一个WEB远程调用框架,采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScrip ...

  10. sum(case when then)(男女生的个数)

    判断类似一个班级的男生和女生的人数,用sum (cese when then ) select count(er.execute_result), sum(case er.execute_result ...