主要是使用VideoView类来实现的,这个类将视频的显示和控制集于一身,使得我们仅仅借助它
就可以完成一个简易的视频播放器
方法名 功能描述
setVideoPath() 设置要播放的视频文件的位置
start() 开始或继续播放视频
pause() 暂停播放视频
resum() 将视频重头开始播放
seekTo() 从指定的位置开始播放视频
isPlaying() 判断当前是否正在播放视频
getDuration() 获取载入的视频文件的时长
新建PlayVideoTest项目
修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <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> <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
主活动代码:
package com.gougoucompany.clarence.playvideotest; import android.Manifest; import android.content.pm.PackageManager; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import android.widget.VideoView; import java.io.File; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private VideoView videoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); videoView = (VideoView) findViewById(R.id.video_view); Button play = (Button) findViewById(R.id.play); Button pause = (Button) findViewById(R.id.pause); Button replay = (Button) findViewById(R.id.replay); play.setOnClickListener(this); pause.setOnClickListener(this); replay.setOnClickListener(this); if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); } else { initVideoPath(); //初始化VideoView } } private void initVideoPath() { File file = new File(Environment.getExternalStorageDirectory(), "movie.mp4"); videoView.setVideoPath(file.getPath()); //指定视频文件的路径 } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch(requestCode) { case 1: if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initVideoPath(); } else { Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show(); finish(); } break; default: break; } } @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(); //将videoView占用的资源释放掉 } } }
你会发现这些代码和播放音频的代码几乎一样,这是因为VideoView背后仍然是使用MediaPlayer来对视频文件进行控制。
注意:VideoView对于视频格式的支持和播放效率方面存在着较大的不足,因此可以只用于播放游戏开头动画或者是一些短的视频
宣传。