android视频播放demo
㈠ 跪求一个 android 视频缓存完整demo(带进度条)
在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了。 这个demo展示了ProgressBar进度条和ProgressDialog进度框。 一、ProgressDialog进度框,效果如图所示: 代码如下: 复制代码 代码如下: //进度对话框按钮监听 class ProssButtonListener implements OnClickListener { @Override public void onClick(View v) { myDialog = ProgressDialog.show(ProgressbarDemo.this, "进度条标题", "进度条内容", true); new Thread() { public void run() { try { /* 在这里写上要背景运行的程序片段 */ /* 为了明显看见效果,以暂停3秒作为示范 */ sleep(3000); } catch (Exception e) { e.printStackTrace(); } finally { // 卸载所创建的myDialog对象。 myDialog.dismiss(); } } }.start(); /* 开始运行运行线程 */ } } 二、进度条对话框,这里用两种情况来动态显示进度条刻度 1、handle方法 效果图如下: 代码如下: 复制代码 代码如下: //进度条handle按钮监听 class ProssBarHandleButtonListener implements OnClickListener { @Override public void onClick(View v) { progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(1000); new Thread() { public void run() { for(int i=0;i<=1000;){ try { /* 在这里写上运行的进度条 */ Message msg = new Message(); msg.what = 1; msg.getData().putInt("size", i); handler.sendMessage(msg);//handle发送消息 /* 为了明显看见效果,以暂停1秒作为示范 */ sleep(100); i+=10; } catch (Exception e) { handler.obtainMessage(-1).sendToTarget(); e.printStackTrace(); } } } }.start(); /* 开始运行运行线程 */ } } //handle接收消息 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: progressBarHandle.setProgress(msg.getData().getInt("size")); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress()); myProssBarhandleText.setText(result+ "%"); if(progressBarHandle.getProgress()==progressBarHandle.getMax()){ Toast.makeText(ProgressbarDemo.this, "下载成功", 1).show(); progressBarHandle.setVisibility(View.GONE); myProssBarhandleText.setVisibility(View.GONE); } break; case -1: Toast.makeText(ProgressbarDemo.this,"下载失败", 1).show(); break; } } }; 2、使用AsyncTask方法,效果图与handle效果一样 具体代码如下: 复制代码 代码如下: //进度条synctask按钮监听 class ProssBarSyncButtonListener implements OnClickListener { @Override public void onClick(View v) { new AsyncLoader().execute((Void)null); } } //AsyncTask 任务执行 class AsyncLoader extends AsyncTask<Void, Integer, Integer> { @Override // 在doInBackground方法执行前执行 protected void onPreExecute(){ progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(100000); } // 做具体的耗时操作 protected Integer doInBackground(Void... params) { //这里以1万的进度条刻度来显示 int totalSize = 100000; for (int i = 0; i < 100000; ) { publishProgress(i); //通过推送消息传递数据给onProgressUpdate方法执行 i+=10; } return totalSize; } // 在doInBackground方法执行过程中执行 protected void onProgressUpdate(Integer... progress) { progressBarHandle.setProgress(progress[0]); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); myProssBarhandleText.setText(result+ "%"); } // 在doInBackground方法结束后执行 protected void onPostExecute(Integer result) { Toast.makeText(ProgressbarDemo.this, "下载成功,下载了"+result, 1).show(); myProssBarhandleText.setVisibility(View.GONE); progressBarHandle.setVisibility(View.GONE); } } 点击下载DEMO示例
㈡ Android项目视频播放器例子
InputStream is = getResources().openRawResource(R.id.filename);
调用url的地方也要改下 没看到代码 ,你自己改吧,应为用到url的地方是通过访问网络得到的InputStream,这里已经得到了,很好改的,
希望能帮到你!
㈢ android 如何实现图片视频混合播放啊
直接上代码:
布局文件就是两个全屏的videoview和imageview重叠
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/pictureView"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
java部分:
/*
视频图片混合展示demo
*/
packagecom.example.administrator.hunbo;
importandroid.content.Context;
importandroid.media.MediaPlayer;
importandroid.net.Uri;
importandroid.os.Handler;
importandroid.os.storage.StorageManager;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.Toast;
importandroid.widget.VideoView;
importjava.io.File;
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importjava.util.ArrayList;
{
privateVideoViewvideoView;
privateImageViewpictureView;
booleanisPlaying=false;
privateArrayListarrayList=newArrayList<String>();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();//隐藏actionBar
//初始化控件
videoView=findViewById(R.id.videoView);
pictureView=findViewById(R.id.pictureView);
//最开始两个view都是隐藏的
videoView.setVisibility(View.GONE);
pictureView.setVisibility(View.GONE);
//检测SD卡是否存在
String[]result=null;
StorageManagerstorageManager=(StorageManager)getSystemService(Context.STORAGE_SERVICE);
try{
Methodmethod=StorageManager.class.getMethod("getVolumePaths");
method.setAccessible(true);
try{
result=(String[])method.invoke(storageManager);
}catch(InvocationTargetExceptione){
e.printStackTrace();
}
if(result.length>1){
//Toast.makeText(this,"检测到U盘",Toast.LENGTH_SHORT).show();
AllFilesPath("/mnt/usb/");
playList();
}else{
Toast.makeText(this,"未检测到U盘,请在开机前插入U盘,或者重新启动此应用",Toast.LENGTH_SHORT).show();
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
finish();
}
},2500);
}
}catch(Exceptione){
e.printStackTrace();
}
}
//获取所有图片视频的绝对路径到arraylist
privateArrayListAllFilesPath(Stringpath){
Filefile=newFile(path);
File[]files=file.listFiles();
for(Filef:files){
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("mp4")
||f.getName().endsWith("avi")||f.getName().endsWith("mkv")||f.getName().endsWith("rmvb")
||f.getName().endsWith("flv")){
System.out.println("------------获取到了一个可用路径:"+f.getAbsolutePath());
arrayList.add(f.getAbsolutePath());//添加到arralist
}elseif(f.isDirectory()){
AllFilesPath(f.getAbsolutePath());
}
}
returnarrayList;
}
//依次混合播放arralist里的图片或视频
publicintlistNum;
privatevoidplayList(){
if(listNum>=arrayList.size()){
finish();
//listNum=0;
}else{
System.out.println("---------------------------收入路径---------------------------");
System.out.println("isplaying="+isPlaying);
finalFilef=newFile(arrayList.get(listNum).toString());
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("png")){
System.out.println("---------------------------添加了一张图片:"+f.getAbsolutePath());
pictureView.setVisibility(View.VISIBLE);
pictureView.setImageURI(Uri.fromFile(f));
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
System.out.println("---------------------------播完了一张位于"+f.getAbsolutePath()+"的图片》》》》》》》》》》》》》》》》》");
pictureView.setVisibility(View.GONE);
listNum++;
playList();
}
},2000);//2秒后结束当前图片
}elseif(f.getName().endsWith("mp4")||f.getName().endsWith("avi")||f.getName().endsWith("mkv")
||f.getName().endsWith("rmvb")||f.getName().endsWith("flv")){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~添加了一个视频"+f.getAbsolutePath());
videoView.setVideoPath(f.getAbsolutePath());
videoView.setVisibility(View.VISIBLE);//播放之前显示videoView
videoView.start();
videoView.setOnCompletionListener(newMediaPlayer.OnCompletionListener(){
@Override
publicvoidonCompletion(MediaPlayermp){
System.out.println("---------------------------播完了一个位于"+f.getAbsolutePath()+"的视频《《《《《《《《《《《《《《《《《《");
videoView.setVisibility(View.GONE);//视频播放完毕后隐藏videoView
listNum++;
playList();
}
});
}
}
}
㈣ android 实现播放网络视频
没有调start(),vv.setVideoURI(uri);后要调用vv.start(),才可以播放,这里面有好几个接口,pause,resunme,stop你看下api,建议看下Mediaplayer播放的状态机,对你理解多媒体播放有好处。
㈤ Android 在线播放视频
vitamio 能播放绝大部分格式的视频,但是这个有点大,里面的so文件比较多,官方文档上说有瘦身的方法,我试过但是没成功,就一个用了vitamio 的小Demo,打完包都10M了。在线视频的话如果在电脑浏览器上能直接播放的话,用这个都可以播的,也有缓冲。我们项目也有在线视频播放,原本也是准备用vitamio 的,但是太大了,打完包apk增加了10M,然后我就换成了universalVideoView 了,这个也可以在线播放,有缓冲效果,主要是打包后apk不大。如果你播放在线视频功能要求高,而且不在乎APK大小的话可以使用vitamio ,如果仅想实现在线播放的话建议universalVideoView 就够了!
㈥ 初学者尝试制作Android视频播放器,使用videoview无法播放视频,画面一片空白。
给你个以前写的demo吧,随便看看吧,希望对你有帮助。
㈦ android程序播放音乐和改成放视频怎么弄,需要在代码中怎么更改在哪里改
首先新建一个项目命名为Mp3Demo(这个看个人喜好),Activity命名为Mp3Demo。
1.接下来在Mp3Demo.java中输入以下代码:
package com.example.mp3demo;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Mp3Demo extends Activity
{ //声名变量
private Button start=null;
private Button pause=null;
private Button stop=null;
private TextView state=null;
private MediaPlayer mp3;
private Boolean flag=false; //设置标记,false表示正在播放
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_mp3_demo);
//取得各按钮组件
start=(Button) super.findViewById(R.id.start);
pause=(Button) super.findViewById(R.id.pause);
stop=(Button) super.findViewById(R.id.stop);
state=(TextView)super.findViewById(R.id.state);
//为每个按钮设置单击事件
start.setOnClickListener(new OnClickListenerStart());
pause.setOnClickListener(new OnClickListenerPause());
stop.setOnClickListener(new OnClickListenerStop());
mp3= new MediaPlayer(); //创建一个MediaPlayer对象
//在res下新建一个raw文件夹把一首歌放到此文件夹中并用英文命名
mp3 = MediaPlayer.create(Mp3Demo.this,R.raw.sky);
}
//各按钮单击事件的实现如下
//开始播放
private class OnClickListenerStart implements OnClickListener{
//implementsOnClickListener为实现OnClickListener接口
@Override
//重写onClic事件
public void onClick(View v)
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
try
{
if (mp3!=null)
{
mp3.stop();
}
mp3.prepare(); //进入到准备状态
mp3.start(); //开始播放
state.setText("Playing"); //改变输出信息为“Playing”,下同
} catch (Exception e)
{
state.setText(e.toString());//以字符串的形式输出异常
e.printStackTrace(); //在控制台(control)上打印出异常
}
}
}
//暂停播放
private class OnClickListenerPause implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (flag==false) //若flag为false,则表示此时播放器的状态为正在播放
{
mp3.pause();
flag=true;
state.setText("pause");
}
else if(flag==true){
mp3.start(); //开始播放
flag=false; //重新设置flag为false
state.setText("Playing");
}
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
}
}
//停止播放
private class OnClickListenerStop implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (mp3!=null)
{
mp3.stop();
state.setText("stop");
}
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
}
}
//重写暂停状态事件
protected void onPause(){
try
{
mp3.release(); //释放音乐资源
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
super.onPause();
}
}
2.按下来是定义布局文件,代码如下:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start"/>
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pause"/>
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop"/>
㈧ android如何实现视频的在线播放
vitamio
能播放绝大部分格式的视频,但是这个有点大,里面的so文件比较多,官方文档上说有瘦身的方法,我试过但是没成功,就一个用了vitamio
的小demo,打完包都10m了。在线视频的话如果在电脑浏览器上能直接播放的话,用这个都可以播的,也有缓冲。我们项目也有在线视频播放,原本也是准备用vitamio
的,但是太大了,打完包apk增加了10m,然后我就换成了universalvideoview
了,这个也可以在线播放,有缓冲效果,主要是打包后apk不大。如果你播放在线视频功能要求高,而且不在乎apk大小的话可以使用vitamio
,如果仅想实现在线播放的话建议universalvideoview
就够了!