package com.lcjian.library.video;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.pm.ActivityInfo;
|
import android.media.MediaPlayer;
|
import android.support.annotation.NonNull;
|
import android.support.annotation.Nullable;
|
import android.util.AttributeSet;
|
import android.util.Log;
|
import android.view.GestureDetector;
|
import android.view.LayoutInflater;
|
import android.view.MotionEvent;
|
import android.view.View;
|
import android.widget.FrameLayout;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.SeekBar;
|
import android.widget.TextView;
|
|
import com.lcjian.lcjianlibrary.R;
|
|
public class VideoPlayerController extends FrameLayout {
|
|
private Activity mActivity;
|
|
private final static String TAG = "VideoPlayerController";
|
|
private MediaPlayer mediaPlayer;
|
private IVideoPlayerListener videoPlayerListener;
|
|
|
//容器
|
private FrameLayout fl_bottom;
|
private LinearLayout ll_top;
|
private View contentView;
|
|
|
private ImageView iv_back;//返回
|
private TextView tv_title;//标题
|
private ImageView iv_electric;//电量
|
private TextView tv_time;//当前时间
|
private ImageView iv_lock;//锁屏
|
private ImageView iv_play;//播放
|
private SeekBar seekBar;//进度
|
private ImageView iv_next;//下一级
|
private TextView tv_progress;//现在的播放进度
|
private TextView tv_duration;//视频总时长
|
private TextView tv_definition;//清晰度
|
private ImageView iv_episode;//选集
|
private ImageView iv_full_screen;
|
|
public VideoPlayerController setMediaPlayer(MediaPlayer mediaPlayer) {
|
this.mediaPlayer = mediaPlayer;
|
return this;
|
}
|
|
public VideoPlayerController setVideoPlayerListener(IVideoPlayerListener videoPlayerListener) {
|
this.videoPlayerListener = videoPlayerListener;
|
return this;
|
}
|
|
public VideoPlayerController setContentView(View contentView) {
|
this.contentView = contentView;
|
return this;
|
}
|
|
|
public VideoPlayerController(@NonNull Context context) {
|
super(context);
|
}
|
|
public VideoPlayerController(@NonNull Context context, @Nullable AttributeSet attrs) {
|
super(context, attrs);
|
LayoutInflater.from(context).inflate(R.layout.video_player_controller, this);
|
|
fl_bottom = findViewById(R.id.fl_bottom);
|
ll_top = findViewById(R.id.ll_top);
|
|
iv_back = findViewById(R.id.iv_back);
|
tv_title = findViewById(R.id.tv_title);
|
iv_electric = findViewById(R.id.iv_electric);
|
tv_time = findViewById(R.id.tv_time);
|
iv_lock = findViewById(R.id.iv_lock);
|
iv_play = findViewById(R.id.iv_play);
|
seekBar = findViewById(R.id.seekBar);
|
iv_next = findViewById(R.id.iv_next);
|
tv_progress = findViewById(R.id.tv_progress);
|
tv_duration = findViewById(R.id.tv_duration);
|
tv_definition = findViewById(R.id.tv_definition);
|
iv_episode = findViewById(R.id.iv_episode);
|
iv_full_screen = findViewById(R.id.iv_full_screen);
|
iv_full_screen.setOnClickListener(new OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
}
|
});
|
}
|
|
private void showController() {
|
if (!isLock()) {
|
fl_bottom.setVisibility(View.VISIBLE);
|
ll_top.setVisibility(View.VISIBLE);
|
}
|
iv_lock.setVisibility(View.VISIBLE);
|
}
|
|
private void hiddenController() {
|
fl_bottom.setVisibility(View.GONE);
|
ll_top.setVisibility(View.GONE);
|
iv_lock.setVisibility(View.GONE);
|
}
|
|
private GestureDetector mGesde = new GestureDetector(new MSimpleGestureDectListener());
|
|
/**
|
* 初始化
|
*/
|
public void build(Activity mActivity) {
|
this.mActivity = mActivity;
|
contentView.setOnTouchListener(new OnTouchListener() {
|
@Override
|
public boolean onTouch(View v, MotionEvent event) {
|
mGesde.onTouchEvent(event);
|
return true;
|
}
|
});
|
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
boolean isTouch = false;
|
|
@Override
|
public void onProgressChanged(SeekBar seekBar, int precent, boolean b) {
|
if (isTouch) {
|
//计算 拖拉后的 时间长度:
|
int positionLong = mediaPlayer.getDuration() * seekBar.getProgress() / 100;
|
mediaPlayer.seekTo(positionLong);
|
}
|
}
|
|
@Override
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
// mHandler.removeMessages(0);
|
// isTouch = true;
|
// mediaPlayer.pause();
|
// stop$play.setImageResource(R.mipmap.play_small);
|
}
|
|
@Override
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
// if (controllerView.getVisibility() == View.VISIBLE) {
|
// if (mHandler != null) {
|
// mHandler.sendEmptyMessageDelayed(0, 4000);
|
// }
|
// }
|
isTouch = false;
|
mediaPlayer.start();
|
// stop$play.setImageResource(R.mipmap.stop_small);
|
}
|
});
|
}
|
|
public void changeOrien(Activity activity) {
|
// boolean tag = requestOrien.getTag() == null ? false : (boolean) requestOrien.getTag();
|
// activity.setRequestedOrientation(!tag ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
// requestOrien.setTag(!tag);
|
}
|
|
//锁屏
|
private void lock() {
|
hiddenController();
|
}
|
|
//解锁屏
|
private void unLock() {
|
if (isLock())
|
showController();
|
}
|
|
|
interface IVideoPlayerListener {
|
//点击了暂停按钮
|
public void onPause();
|
|
//下一集
|
public void onNext();
|
|
//返回
|
public void onBack();
|
}
|
|
private boolean isLock() {
|
return false;
|
}
|
|
private boolean isControllerShow() {
|
return ll_top.getVisibility() == View.VISIBLE;
|
}
|
|
//手势处理
|
private class MSimpleGestureDectListener extends GestureDetector.SimpleOnGestureListener {
|
|
@Override
|
public boolean onSingleTapConfirmed(MotionEvent e) {
|
if (isControllerShow()) {
|
hiddenController();
|
} else {
|
showController();
|
}
|
|
return true;
|
}
|
|
@Override
|
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
Log.i(TAG, String.format("onScroll:distanceX=%s distanceY=%s", distanceX, distanceY));
|
if (distanceX != 0) {
|
|
}
|
|
return true;
|
}
|
}
|
|
|
}
|