MobliePlayer自定义最简单的视频播放器

老子叫甜甜 提交于 2020-02-18 14:44:41

MobliePlayer自定义最简单的视频播放器

tags:最近7天
前言:
通过android系统自的播放器快速自定义播放器VideoView用于播放本地视频。

新建一个Activity

新建的SystemVideoPlayer Activity继承于Activity,布局文件为activity_system_video_player,

public class SystemVideoPlayer extends Activity {

    private VideoView videoview;

    private Uri uri;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_system_video_player);
        videoview = (VideoView) findViewById(R.id.videoview);

        //得到播放地址,本地址由调用的面面通过setDataAndType传送过来
        uri=getIntent().getData();
        //设置播入器的地址到VideoView
        videoview.setVideoURI(uri);

        //设置播改数据是否准备好,应有这个监听,
        //setOnPreparedListener注册一个回调函数,以便在加载媒体文件准备就绪时调用。
        //MediaPlayer mp返回一个准备好的媒体播放器
        //videoview.start()启动播放
        videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                videoview.start();
            }
        });

        /**
         * 播放错误的方法
         */
        videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Toast.makeText(SystemVideoPlayer.this,"播放器错误",Toast.LENGTH_LONG).show();
                return true;
            }
        });

        /**
         * 播放完毕的方法
         */
        videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                Toast.makeText(SystemVideoPlayer.this,"播放完成",Toast.LENGTH_LONG).show();
                finish();
            }
        });

        /**
         * 显示播放控制面板
         */
        videoview.setMediaController(new MediaController(this));
    }
}

播放界面

根据以上代码,可知我们的播放界面布局文件为activity_system_video_player.xml
采用最简单的RelativeLayout(相对布局)中加入一个VideoView来实现。
android:background="#000000"页面设置为黑色,
android:layout_centerInParent="true"播放器设置为父窗体居中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:gravity="center"
    android:background="#000000"
    android:layout_height="match_parent">

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

</RelativeLayout>

系统注册SystemVideoPlayer.java

打开工程清单文件AndroidManifest.xml,其中的android:screenOrientation="landscape"这个控制播放时界面为横屏,
android:screenOrientation各参数如下:
“unspecified”:默认值 由系统来推断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
“landscape”:横屏显示(宽比高要长)//本例使用的参数
“portrait”:竖屏显示(高比宽要长)
“user”:用户当前首选的方向
“behind”:和该Activity以下的那个Activity的方向一致(在Activity堆栈中的)
“sensor”:有物理的感应器来决定。假设用户旋转设备这屏幕会横竖屏切换。
“nosensor”:忽略物理感应器。这样就不会随着用户旋转设备而更改了

 <activity android:name=".SystemVideoPlayer" android:screenOrientation="landscape"></activity>

实现全屏的代码

将以下代码放入SystemVideoPlayer.java的setContentView(R.layout.activity_system_video_player);之前。用于去掉手机的系统栏,实现播放时真正全屏。

 requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

完整代码

package plczl.cn.mobileplayer;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
import androidx.annotation.Nullable;

public class SystemVideoPlayer extends Activity {
    private VideoView videoview;
    private Uri uri;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_system_video_player);
        videoview = (VideoView) findViewById(R.id.videoview);
        //得到播放地址,本地址由调用的面面通过setDataAndType传送过来
        uri=getIntent().getData();
        //设置播入器的地址到VideoView
        videoview.setVideoURI(uri);
        //设置播改数据是否准备好,应有这个监听,
        //setOnPreparedListener注册一个回调函数,以便在加载媒体文件准备就绪时调用。
        //MediaPlayer mp返回一个准备好的媒体播放器
        //videoview.start()启动播放
        videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                videoview.start();
            }
        });

        /**
         * 播放错误的方法
         */
        videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Toast.makeText(SystemVideoPlayer.this,"播放器错误",Toast.LENGTH_LONG).show();
                return true;
            }
        });
        /**
         * 播放完毕的方法
         */
        videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                Toast.makeText(SystemVideoPlayer.this,"播放完成",Toast.LENGTH_LONG).show();
                finish();
            }
        });
        /**
         * 显示播放控制面板
         */
        videoview.setMediaController(new MediaController(this));
    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!