位置: 编程技术 - 正文
推荐整理分享Android--VideoPlay--视频播放器,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
代码跟音乐播放器有大部分是相同的,各位可以将mp4格式的 视频文件放到sdcard卡中,在输入框中输入文件名即可,在 模拟器上运行请使用android2.0版本,据说其他版本的模拟器 不支持视频播放,如有错误之处请大家指出
java代码如下:
[html] view plaincopy package cn.mrzhu;
import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.os.Environment; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.widget.EditText; import android.widget.Toast;
public class VideoPlayDemoActivity extends Activity { private EditText nameText; private String path;//文件路径 private MediaPlayer mediaPlayer;//media对象 private SurfaceView surfaceView; private boolean pause;//暂停标记 private int position;//播放的进度 /* Called when the activity is first created. / @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
nameText = (EditText)findViewById(R.id.filename); surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
//把输送给surfaceview的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(, );//设置视频播放窗口的大小 surfaceView.getHolder().setKeepScreenOn(true);//保持屏幕高亮 surfaceView.getHolder().addCallback(new SurfaceCallback()); mediaPlayer = new MediaPlayer();//实例化一个播放器对象 }
private final class SurfaceCallback implements Callback{
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
/* * 当surfaceView被创建时 */ public void surfaceCreated(SurfaceHolder holder) { if(position > 0 && path != null){ play(position); position = 0; } }
/* * 当surfaceView被销毁时 */
public void surfaceDestroyed(SurfaceHolder holder) { mediaPlayer.stop(); }
}
/* * 按钮事件,在main.xml中,每个按钮的click_on = mediaplay */ public void mediaplay(View v){ switch(v.getId()){
case R.id. String filename = nameText.getText().toString();//获取文件名 File file = new File(Environment.getExternalStorageDirectory(), filename); if(file.exists()){ path = file.getAbsolutePath(); play(0); }else{ //若路径不存在,弹出Toast提示 Toast.makeText(getApplicationContext(), R.string.filenoexsit, Toast.LENGTH_SHORT).show(); } break;
case R.id. if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); pause = true; }else{ mediaPlayer.start(); pause = false; } break;
case R.id. if(mediaPlayer.isPlaying()){ mediaPlayer.seekTo(0); }else{ if(path != null){ play(0);//将播放进度置为0,恢复初始状态 } } break;
case R.id. if(mediaPlayer.isPlaying()){ mediaPlayer.stop(); } break; } }
private void play(int position) { try { mediaPlayer.reset(); mediaPlayer.setDataSource(path); mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.prepare(); mediaPlayer.setOnPreparedListener(new PrepareListener(position)); } catch (Exception e) {
} }
private final class PrepareListener implements OnPreparedListener{ private int position;
public PrepareListener(int position) { super(); this.position = position; } public void onPrepared(MediaPlayer mp) { mediaPlayer.start();//播放视频 if(position > 0) mediaPlayer.seekTo(position); }
}
@Override protected void onDestroy() { mediaPlayer.release(); mediaPlayer = null; super.onDestroy(); } }
main.xml代码如下:
[html] view plaincopy
[置顶] android利用线程池高效实现异步任务 不管是开发android应用程序还是java应用程序,异步任务都是经常用到的,尤其是android本身做为线程不安全,只要稍微耗时的操作都要用到异步任务,而无论是j
vs 编译mosquitto win版本,开启websockets,实现消息推送 前言:因为之前没有怎么碰vs,只搞过cygwin,而cygwin上搞了好久都搞不定,以至于重新整理思路,这window上的版本应该怎么去编译。一直不知道怎么搞,
Android 编程下 Touch 事件的分发和消费机制 本文转自:
上一篇:Android Volley 框架的使用(一)(androidui框架)
下一篇:[置顶] android利用线程池高效实现异步任务([置顶]星陨计划)
友情链接: 武汉网站建设