package tv.buka.android.ui.home; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import java.io.IOException; import java.util.Formatter; import java.util.Locale; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import tv.buka.android.R; import tv.buka.android.base.BaseActivity; public class PlayerActivity extends BaseActivity { String str = "http://jzvd.nathen.cn/c6e3dc12a1154626b3476d9bf3bd7266/6b56c5f0dc31428083757a45764763b0-5287d2089db37e62345123a1be272f8b.mp4"; @BindView(R.id.faceView) SurfaceView faceView; @BindView(R.id.back) ImageView back; @BindView(R.id.bofangzanting) ImageView bofangzanting; @BindView(R.id.seekBar) SeekBar seekBar; @BindView(R.id.start) TextView start; @BindView(R.id.stop) TextView stop; MediaPlayer mediaPlayer; int duration; @BindView(R.id.title_name) TextView titleName; @BindView(R.id.title_top) LinearLayout titleTop; @BindView(R.id.title_bottom) LinearLayout titleBottom; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) { titleTop.setVisibility(View.GONE); titleBottom.setVisibility(View.GONE); } } }; Runnable r = new Runnable() { @Override public void run() { if (mediaPlayer != null){ int mCurrentPosition = mediaPlayer.getCurrentPosition();//获取player当前进度,毫秒表示 int total = mediaPlayer.getDuration(); seekBar.setProgress(mCurrentPosition);//seekbar同步歌曲进度 seekBar.setMax(total);//seekbar设置总// 时长 stop.setText(calculateTime(total)); start.setText(calculateTime( mCurrentPosition)); } handler.postDelayed(this,500);//延迟一秒运行线程 } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); ButterKnife.bind(this); titleName.setText("测试"); titleName.setVisibility(View.GONE); mediaPlayer = new MediaPlayer(); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //获取SurfaceHolder 可以通过该接口来操作SurfaceView中的Surface final SurfaceHolder surfaceHolder = faceView.getHolder(); //设置Meiaplayer的准备监听 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { //准备完成后播放 mediaPlayer.start(); duration = mediaPlayer.getDuration(); updateSeekBar(); } }); handler.sendEmptyMessageDelayed(0,5000); surfaceHolder.addCallback(new SurfaceHolder.Callback() { //当SurfaceView中Surface创建时回掉 //该方法表示Surface已经创建完成,可以在该方法中进行绘图操作 @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.reset(); try { //设置视屏文件图像的显示参数 mediaPlayer.setDisplay(holder); //file.getAbsolutePath()本地视频 //uri 网络视频 mediaPlayer.setDataSource(PlayerActivity.this, Uri.parse(str)); //prepare();表示准备工作同步进行,(准备工作在UI线程中进行) //当播放网络视频时,如果网络不要 会报ARN 所以不采用该方法 //mediaPlayer.prepare(); //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法 mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } } //当SurfaceView的大小发生改变时候触发该方法 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } //Surface销毁时回掉 //当Surface销毁时候,同时把MediaPlayer也销毁 @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mediaPlayer != null) { mediaPlayer.stop(); //释放资源 mediaPlayer.release(); } } }); //设置 surfaceView点击监听 faceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: titleTop.setVisibility(View.VISIBLE); titleBottom.setVisibility(View.VISIBLE); handler.sendEmptyMessageDelayed(0,5000); break; } //返回True代表事件已经处理了 return true; } }); //暂停播放 bofangzanting.setOnClickListener(new View.OnClickListener() { private int zanTinZhi; @Override public void onClick(View view) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); zanTinZhi = mediaPlayer.getCurrentPosition(); bofangzanting.setImageDrawable(getResources().getDrawable(R.drawable.bofang)); } else { mediaPlayer.start(); mediaPlayer.seekTo(zanTinZhi); bofangzanting.setImageDrawable(getResources().getDrawable(R.drawable.zantin)); } } }); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { Log.e("progress",progress+"+++"+ duration+"*****"+seekBar.getMax()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { mediaPlayer.seekTo(seekBar.getProgress()); } }); } @OnClick({R.id.back, R.id.bofangzanting, R.id.seekBar}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.back: mediaPlayer.stop(); handler.removeCallbacks(r); this.finish(); break; case R.id.bofangzanting: break; case R.id.seekBar: break; } } //计算歌曲时间 private String calculateTime(int time){ // 转换成字符串的时间 StringBuilder mFormatBuilder = new StringBuilder(); Formatter mFormatter = new Formatter(mFormatBuilder, Locale.getDefault()); int totalSeconds = time / 1000; int seconds = totalSeconds % 60; int minutes = (totalSeconds / 60) % 60; int hours = totalSeconds / 3600; mFormatBuilder.setLength(0); if (hours > 0) { return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString(); } else { return mFormatter.format("%02d:%02d", minutes, seconds).toString(); } } private void updateSeekBar(){ runOnUiThread(r); } }
自定义视频播放
最新推荐文章于 2024-10-18 12:17:55 发布