Android原生视频播放VideoView的使用
时间:2022-07-26
本文章向大家介绍Android原生视频播放VideoView的使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了Android原生视频播放VideoView的具体代码,供大家参考,具体内容如下
布局文件activity_video.xml
<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=".MainActivity"
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" /
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" /
</RelativeLayout
对应的Avtivity:VideoActivity.java
package com.example.administrator.main;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.VideoView;
public class VideoActivity extends AppCompatActivity {
private ProgressBar progressBar;
private VideoView videoView;
private MediaController mediaController;
private int intPositionWhenPause = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
//调用系统自带视频播放或者安装的第三方播放器
// Uri uri=Uri.parse("http://vd3.bdstatic.com/mda-ig4tp6gnqwu5we8i/mda-ig4tp6gnqwu5we8i.mp4");
// Intent intent=new Intent(Intent.ACTION_VIEW);
// intent.setDataAndType(uri,"video/*");
// startActivity(intent);
initVideoView();
}
/**
* 初始化videoview播放
*/
public void initVideoView() {
//初始化进度条
progressBar = (ProgressBar) findViewById(R.id.progressBar);
//初始化VideoView
videoView = (VideoView) findViewById(R.id.videoView);
//初始化videoview控制条
mediaController = new MediaController(this);
//设置videoview的控制条
videoView.setMediaController(mediaController);
//设置显示控制条
mediaController.show(0);
//设置播放完成以后监听
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
}
});
//设置发生错误监听,如果不设置videoview会向用户提示发生错误
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
//设置在视频文件在加载完毕以后的回调函数
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
progressBar.setVisibility(View.GONE);
videoView.start();
}
});
//设置videoView的点击监听
videoView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
//设置网络视频路径
Uri uri = Uri.parse("http://vd3.bdstatic.com/mda-ig4tp6gnqwu5we8i/mda-ig4tp6gnqwu5we8i.mp4");
videoView.setVideoURI(uri);
//设置为全屏模式播放
setVideoViewLayoutParams(2);
}
/**
* 设置videiview的全屏和窗口模式
*
* @param paramsType 标识 1为全屏模式 2为窗口模式
*/
public void setVideoViewLayoutParams(int paramsType) {
//全屏模式
if (1 == paramsType) {
//设置充满整个父布局
RelativeLayout.LayoutParams LayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
//设置相对于父布局四边对齐
LayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
LayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
LayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
LayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
//为VideoView添加属性
videoView.setLayoutParams(LayoutParams);
} else {
//窗口模式
//获取整个屏幕的宽高
DisplayMetrics DisplayMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(DisplayMetrics);
//设置窗口模式距离边框50
int videoHeight = DisplayMetrics.heightPixels;
int videoWidth = DisplayMetrics.widthPixels;
RelativeLayout.LayoutParams LayoutParams = new RelativeLayout.LayoutParams(videoWidth, videoHeight);
//设置居中
LayoutParams.addRule(RelativeLayout.ALIGN_TOP);
//为VideoView添加属性
videoView.setLayoutParams(LayoutParams);
}
}
/**
* 页面暂停效果处理
*/
@Override
protected void onPause() {
super.onPause();
//如果当前页面暂停则保存当前播放位置,全局变量保存
intPositionWhenPause = videoView.getCurrentPosition();
//停止回放视频文件
videoView.stopPlayback();
}
/**
* 页面从暂停中恢复
*/
@Override
protected void onResume() {
super.onResume();
//跳转到暂停时保存的位置
if (intPositionWhenPause = 0) {
videoView.seekTo(intPositionWhenPause);
//初始播放位置
intPositionWhenPause = -1;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )
- Java 基础知识点(必知必会其二)
- Java 基础知识点(必知必会其一)
- PyQt5 GUI应用程序工具包入门(3)—信号槽
- web基础之hibernate(一篇)
- 微信小程序头脑王者辅助神器
- web基础之Structs(一篇)
- S3上传代码用例-golang
- jsp-------------之分页技术(一)
- ------------数据库的加锁操作(上)
- 对象存储基础概念
- 关于byte[]字节传输的大端和小端小议
- hdu 2818 Building Block
- hdu 3074 Zjnu Stadium (带权并查集)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Codeforces Round #624 (Div. 3) B - WeirdSort
- 详解 Ajax
- 这个腾讯博客是被腾讯爬虫爬过来的,样式丑,请看我博客园地址,见下文
- Codeforces Round #624 (Div. 3) C - Perform the Combo
- 都是微服务的天下了,还有不知道 JSON 的程序员吗?
- Codeforces Round #624 (Div. 3) D.Three Integers
- select 高级查询之连接查询
- select 高级查询之子查询
- Java 最实用的文件读写
- MySQL基本操作
- MySQL 索引
- notepad++ 配置c++及运行
- Leetcode 687. 最长同值路径
- Leetcode 1071. 字符串的最大公因子
- PAT (Advanced Level) Practice 1146 Topological Order (25分)