/procameralibrary/src/main/java/com/eighteengray/procameralibrary/video/VideoPlayerContainer.java
https://github.com/18Gray/ProCamera · Java · 211 lines · 172 code · 27 blank · 12 comment · 2 complexity · ca9ab0fccb4cc8cc0208f9a0c46c9b83 MD5 · raw file
- package com.eighteengray.procameralibrary.video;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Locale;
- import android.content.Context;
- import android.media.MediaPlayer;
- import android.os.Handler;
- import android.os.SystemClock;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- import android.view.View;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.SeekBar;
- import android.widget.SeekBar.OnSeekBarChangeListener;
- import android.widget.TextView;
- import android.view.View.OnClickListener;
- import com.eighteengray.procameralibrary.R;
- public class VideoPlayerContainer extends LinearLayout implements
- OnClickListener, VideoPlayerView.PlayerListener, IVideoPlayerOperation
- {
- private final static String TAG = "VideoPlayerContainer";
- private VideoPlayerView mVideoPlayerView;
- private LinearLayout mBottomBar;
- private TextView mCurrentTimeView;
- private TextView mDurationView;
- private ImageView mPauseButton;
- private SeekBar mProgressBar;
- private Handler mHandler;
- private SimpleDateFormat mTimeFormat;
- public VideoPlayerContainer(Context context, AttributeSet attrs)
- {
- super(context, attrs);
- initView(context);
- mHandler = new Handler();
- mTimeFormat = new SimpleDateFormat("mm:ss", Locale.getDefault());
- }
- private void initView(Context context)
- {
- inflate(context, R.layout.video_bottom_bar, this);
- mVideoPlayerView = (VideoPlayerView) findViewById(R.id.videoPlayerView);
- mVideoPlayerView.setPalyerListener(this);
- mBottomBar = (LinearLayout) findViewById(R.id.llVideoDetailPlayerBottom);
- mCurrentTimeView = (TextView) mBottomBar
- .findViewById(R.id.tvVideoPlayTime);
- mDurationView = (TextView) mBottomBar
- .findViewById(R.id.tvVideoPlayRemainTime);
- mPauseButton = (ImageView) mBottomBar
- .findViewById(R.id.btnVideoPlayOrPause);
- mProgressBar = (SeekBar) mBottomBar
- .findViewById(R.id.sbVideoDetailPlayer);
- mPauseButton.setOnClickListener(this);
- mProgressBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
- }
- OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener()
- {
- @Override
- public void onStopTrackingTouch(SeekBar seekBar)
- {
- seekPosition(seekBar.getProgress() * 1000);
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar)
- {
- pausedPlay();
- }
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser)
- {
- mCurrentTimeView.setText(mTimeFormat.format(new Date(
- progress * 1000)));
- }
- };
- @Override
- public void playVideo(String path) throws IllegalArgumentException,
- SecurityException, IllegalStateException, IOException
- {
- mVideoPlayerView.playVideo(path);
- }
- @Override
- public void onCompletion(MediaPlayer mp)
- {
- // 播放结束,隐藏该控件
- setVisibility(View.GONE);
- mProgressBar.setProgress(0);
- mCurrentTimeView.setText("00:00");
- mp.reset();
- }
- @Override
- public void onSeekComplete(MediaPlayer mp)
- {
- // 跳转至指定时间后,恢复播放
- resumePlay();
- }
- @Override
- public boolean onTouchEvent(MotionEvent event)
- {
- // 由于在使用了framelayout布局,为了防止点击事件下发给下方的view,在此处捕获掉点击事件。
- return true;
- }
- @Override
- public void onPrepared(MediaPlayer mp)
- {
- // 准备播放,显示该控件
- setVisibility(View.VISIBLE);
- int duration = mp.getDuration();
- // 设置最大事件,单位秒
- mDurationView.setText(mTimeFormat.format(new Date(duration)));
- mProgressBar.setMax((int) Math.floor(duration / 1000));
- mp.start();
- mHandler.removeCallbacks(null, null);
- mHandler.post(playerRunnable);
- }
- Runnable playerRunnable = new Runnable()
- {
- @Override
- public void run()
- {
- // TODO Auto-generated method stub
- if (mVideoPlayerView.isPlaying())
- {
- int current = getCurrentPosition();
- current = (int) Math.floor(current / 1000);
- mProgressBar.setProgress(current);
- mHandler.postAtTime(this, mCurrentTimeView,
- SystemClock.uptimeMillis() + 500);
- }
- }
- };
- @Override
- public void onClick(View v)
- {
- if (mVideoPlayerView.isPlaying())
- {
- pausedPlay();
- } else
- {
- resumePlay();
- }
- }
- /**
- * 恢复播放
- */
- @Override
- public void resumePlay()
- {
- mVideoPlayerView.resumePlay();
- mHandler.removeCallbacks(null, null);
- mHandler.postDelayed(playerRunnable, 500);
- mPauseButton.setImageResource(R.drawable.video_detail_player_pause);
- }
- /**
- * 暂停播放
- */
- @Override
- public void pausedPlay()
- {
- mVideoPlayerView.pausedPlay();
- mPauseButton.setImageResource(R.drawable.video_detail_player_start);
- }
- @Override
- public void seekPosition(int position)
- {
- mVideoPlayerView.seekPosition(position);
- }
- @Override
- public void stopPlay()
- {
- mVideoPlayerView.stopPlay();
- setVisibility(View.GONE);
- }
- @Override
- public boolean isPlaying()
- {
- return mVideoPlayerView.isPlaying();
- }
- @Override
- public int getCurrentPosition()
- {
- return mVideoPlayerView.getCurrentPosition();
- }
- }