Android中使用SurfaceView视频播放器
16lz
2021-12-04
public class PlayerVideoActivity extends Activity {// SurfaceView控件private SurfaceView sv_video;private SurfaceHolder surfaceHolder;// 播放视频对象private MediaPlayer mediaPlayer;private String path;private boolean PasueFlag = false;// 记录暂停播放的位置private int currentPosition = 0;// 播放按钮的控件private LinearLayout video_layout;//声明一个回放的记录位置private int backPosition = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_video);// 获取SurfaceView控件sv_video = (SurfaceView) findViewById(R.id.sv_video);// 通过控件来获取SurfaceHoldersurfaceHolder = sv_video.getHolder();// 回调函数surfaceHolder.addCallback(new SurfaceHolder.Callback() {// surfaceView控件被销毁的方法@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// 当点击后退按钮 就杀死 surfaceView控件 activity被杀死//记录视频所播放的位置int position = mediaPlayer.getCurrentPosition();mediaPlayer.release();mediaPlayer = null;//声明意图对象Intent data = new Intent();data.putExtra("position",position);PlayerVideoActivity.this.setResult(RESULT_OK, data);//当前killPlayerVideoActivity.this.finish();}// surfaceView创建的时候执行的方法@Overridepublic void surfaceCreated(SurfaceHolder holder) {// 当第一次使用SurfaceView的时候 播放视频play();}// surfaceView发生变化执行的操作@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {}});// 在这里怎么获取intent传递的数据path = this.getIntent().getStringExtra("path");backPosition = this.getIntent().getIntExtra("position", 0);// 获取LinearLayout的对象video_layout = (LinearLayout) findViewById(R.id.video_layout);// 隐藏video_layout.setVisibility(View.GONE);}public void playerVideo(View v) {play();// 播放视频}// 视频播放的操作public void play() {if (PasueFlag) {if (mediaPlayer != null) {// 跳转到播放记录的位置mediaPlayer.seekTo(currentPosition);mediaPlayer.start();}// 变为falsePasueFlag = false;} else {// 判断视频 是否为播放状态if (mediaPlayer != null) {if (mediaPlayer.isPlaying()) {System.out.println("视频处于播放状态");}} else {// 传递的路径 是否为空if (path != null) {try {// 创建视频播放的对象mediaPlayer = new MediaPlayer();/** * 视频播放完成出发的事件 */mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {mediaPlayer.release();mediaPlayer = null;System.out.println(mediaPlayer+ "------------onCompletion"+ mp);}});/** * 播放出差错的时候触发的事件 * * 回调函数 */mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp,int what, int extra) {mediaPlayer.release();mediaPlayer = null;return false;}});// 设计音频流类型mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);// 指定播放的文件mediaPlayer.setDataSource(path);// 指定用于播放视频的SurfaceView的控件mediaPlayer.setDisplay(surfaceHolder);mediaPlayer.prepare();//记录上次播放的位置mediaPlayer.seekTo(backPosition);mediaPlayer.start();PasueFlag = false;} catch (IOException e) {e.printStackTrace();}}}}}public void pasueVideo(View v) {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.pause();// 记录这个位置currentPosition = mediaPlayer.getCurrentPosition();// 标识 这视频 会被暂停PasueFlag = true;}}public void stopVideo(View v) {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;// 暂停标识PasueFlag = false;}}public void resetVideo(View v) {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.seekTo(0);mediaPlayer.start();}}// 触摸事件public boolean onTouchEvent(MotionEvent event) {// 获取布局对象是否是隐藏if (View.GONE == video_layout.getVisibility()) {video_layout.setVisibility(View.VISIBLE);// 显示} else {video_layout.setVisibility(View.GONE);// 隐藏}return super.onTouchEvent(event);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.player_video, menu);return true;}/* * protected void onDestroy() { super.onDestroy(); // 释放资源 if (mediaPlayer * != null) { mediaPlayer.release(); mediaPlayer = null; } } */}
public class VideoActivity extends Activity {private static final int VIDEOREQUESTPLAYER = 1;private int position = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_list);}public void player(View v) {Intent intent = new Intent(VideoActivity.this,PlayerVideoActivity.class);File sdCardFile = Environment.getExternalStorageDirectory();String path = sdCardFile.getPath() + "/Music/oppo.3gp";intent.putExtra("path", path);intent.putExtra("position", position);startActivityForResult(intent, VIDEOREQUESTPLAYER);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);System.out.println("-------------------onActivityResult");// 判断是否是这个请求if (VIDEOREQUESTPLAYER == requestCode) {// 判断这个请求的响应吗是否成功if (RESULT_OK == resultCode) {position = data.getIntExtra("position", 0);System.out.println("==========================" + position);}}}}
<SurfaceView android:id="@+id/sv_video" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> <LinearLayout android:id="@+id/video_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_horizontal" android:orientation="horizontal" tools:ignore="UselessParent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="playerVideo" android:text="@string/btn_play" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="pasueVideo" android:text="@string/btn_pasue" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="stopVideo" android:text="@string/btn_stop" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="resetVideo" android:text="@string/btn_reset" /> </LinearLayout>
更多相关文章
- android之音乐播放器
- android之SeekBar控件用法
- 自定义View ----QQ5.0左边侧滑 + 动画
- android里的service和content provider简单介绍
- Android(安卓)VideoView播放视频
- android 动画自动播放
- android gif播放
- Android搜索框自动提示文本框——(单一提示)
- Android(安卓)ListView 控件学习