本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下
1)、surfaceview
在布局文件中
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_media_play" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.zking.android_contentresolve.mediaplayactivity"> <surfaceview android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/sv_media_surface" /> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <seekbar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/seekbar" android:layout_weight="1" /> <imagebutton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_media_play" android:onclick="isplayorpause" /> </linearlayout> </linearlayout>
在activity里面和播放内存卡上音乐的代码差不多,只是视频多了个显示内容,关键代码就是这三条
//播放内存上的视频 mediaplayer.setdatasource(this, uri.parse("file://mnt/sdcard/movies/sister.mp4")); //准备(内存卡) mediaplayer.prepare(); //将媒体播放器捕捉的画面展示在surfaceview 上 mediaplayer.setdisplay(sv_media_surface.getholder());
但是没看前面博客的筒子可能会觉得看不懂,所以还是把完整的代码粘贴出来
public class mediaplayactivity extends appcompatactivity { private seekbar seekbar; private mediaplayer mediaplayer; private surfaceview sv_media_surface; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_media_play); seekbar = (seekbar) findviewbyid(r.id.seekbar); sv_media_surface = (surfaceview) findviewbyid(r.id.sv_media_surface); seekbar.setonseekbarchangelistener(new seekbar.onseekbarchangelistener() { @override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { } @override public void onstarttrackingtouch(seekbar seekbar) { } @override public void onstoptrackingtouch(seekbar seekbar) { //获取拖动结束后的位置 int progress=seekbar.getprogress(); //跳转到某个位置播放 mediaplayer.seekto(progress); } }); } public void isplayorpause(view view){ final imagebutton imagebutton= (imagebutton) view; if(mediaplayer==null){//代表第一次播放音乐 //播放内存卡内的音频 mediaplayer=new mediaplayer(); //设置类型 mediaplayer.setaudiostreamtype(audiomanager.stream_music); //设置音源 try { //播放内存上的视频 mediaplayer.setdatasource(this, uri.parse("file://mnt/sdcard/movies/sister.mp4")); //准备(内存卡) mediaplayer.prepare(); //将媒体播放器捕捉的画面展示在surfaceview 上 mediaplayer.setdisplay(sv_media_surface.getholder()); //必须在播放前加载音频文件(异步准备) // mediaplayer.prepareasync(); } catch (ioexception e) { e.printstacktrace(); } mediaplayer.start(); //把图标改成暂停的图标(这里的暂停图标就是播放时的状态) imagebutton.setimageresource(android.r.drawable.ic_media_pause); //获取音乐的总时长 int duration=mediaplayer.getduration(); //设置进度条的最大值为音乐的总时长 seekbar.setmax(duration); new mythread(); }else if(mediaplayer.isplaying()){//正在播放音乐 mediaplayer.pause(); //把图标改成播放的图标(暂停状态) imagebutton.setimageresource(android.r.drawable.ic_media_play); }else{ mediaplayer.start(); imagebutton.setimageresource(android.r.drawable.ic_media_pause); } } class mythread extends thread{ @override public void run() { super.run(); while(seekbar.getprogress()<seekbar.getmax()){ //获取当前音乐播放的位置 int currentposition=mediaplayer.getcurrentposition(); //让进度条跟着时间走 seekbar.setprogress(currentposition); } } } }
2)、videoview,如果在项目中,仅仅只是播放视频的话,这种方式会比较简单,但是如果是要做视频播放器的话,还是使用第一种方法
布局文件
<videoview android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/vv_main_vedio" />
activity
public class vedioactivity extends appcompatactivity { private videoview vv_main_vedio; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_vedio); vv_main_vedio = (videoview) findviewbyid(r.id.vv_main_vedio); //给videoview设置播放来源 vv_main_vedio.setvideopath("file://mnt/sdcard/movies/sister.mp4"); //实例化媒体控制器 mediacontroller mediacontroller=new mediacontroller(this); //给activity_vedio设置控制器 vv_main_vedio.setmediacontroller(mediacontroller); mediacontroller.setmediaplayer(vv_main_vedio); } }
videoview通过与mediacontroller类结合使用,开发者可以不用自己控制播放与暂停。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论