Android之使用VideoView播放視頻

界面效果

這裏寫圖片描述

代碼

界面代碼

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ygd.myvideotest.MainActivity">

    <VideoView
        android:id="@+id/vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"/>
</RelativeLayout>

程序代碼

package com.example.ygd.myvideotest;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {
    private VideoView videoView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView= (VideoView) findViewById(R.id.vv);
        //視頻控制器
        MediaController mediaController=new MediaController(this);
        videoView.setMediaController(mediaController);
        //視頻文件路徑
        Uri uri=Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/20150514_133937.mp4");
        videoView.setVideoURI(uri);
        //視頻播放結束時的監聽
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                Toast.makeText(MainActivity.this, "播放完畢", Toast.LENGTH_SHORT).show();
            }
        });
        //視頻播放出錯時的監聽
        videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Toast.makeText(MainActivity.this, "加載失敗", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
}

最後不要忘了在清單文件中加讀sd卡權限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

優化

VideoView控件不支持將視頻全屏播放,我們可以通過重寫VideoView來實現全屏播放。複製如下代碼到MyVideoView.java文件中,將使用VideoView的地方替換成MyVideoView,即可實現下圖全屏播放的效果

界面效果

這裏寫圖片描述

代碼

package com.example.ygd.myvideotest;

import android.content.Context;
import android.media.MediaPlayer;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.VideoView;

public class MyVideoView extends VideoView {
 public MyVideoView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }
 public MyVideoView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub0 ~3 K( G/ M( B# I) `
 }
 public MyVideoView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
 }
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  // TODO Auto-generated method stub
 //重點。
  int width = getDefaultSize(0, widthMeasureSpec);
  int height = getDefaultSize(0, heightMeasureSpec);
  setMeasuredDimension(width, height);
 }
 @Override
 public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
  // TODO Auto-generated method stub
  super.setOnPreparedListener(l);
 }
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  return super.onKeyDown(keyCode, event);
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章