|
@@ -32,25 +32,15 @@ import java.lang.ref.WeakReference;
|
|
* 2、触摸事件监听{@link #onTouchEvent(MotionEvent)}
|
|
* 2、触摸事件监听{@link #onTouchEvent(MotionEvent)}
|
|
*/
|
|
*/
|
|
public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener {
|
|
public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener {
|
|
- private VolumeBrightnessProgressLayout mGestureVolumeBrightnessProgressLayout; // 音量亮度调节布局
|
|
|
|
- private VideoProgressLayout mGestureVideoProgressLayout; // 手势快进提示布局
|
|
|
|
-
|
|
|
|
private ImageView mIvLock; // 锁屏按钮
|
|
private ImageView mIvLock; // 锁屏按钮
|
|
- private ImageView mImageStartAndResume; // 开始播放的三角
|
|
|
|
private ImageView mImageCover; // 封面图
|
|
private ImageView mImageCover; // 封面图
|
|
|
|
|
|
- private HideLockViewRunnable mHideLockViewRunnable; // 隐藏锁屏按钮子线程
|
|
|
|
- private GestureDetector mGestureDetector; // 手势检测监听器
|
|
|
|
- private VideoGestureDetector mVideoGestureDetector; // 手势控制工具
|
|
|
|
-
|
|
|
|
private boolean isShowing; // 自身是否可见
|
|
private boolean isShowing; // 自身是否可见
|
|
private SuperPlayerDef.PlayerType mPlayType; // 当前播放视频类型
|
|
private SuperPlayerDef.PlayerType mPlayType; // 当前播放视频类型
|
|
private SuperPlayerDef.PlayerState mCurrentPlayState = SuperPlayerDef.PlayerState.END; // 当前播放状态
|
|
private SuperPlayerDef.PlayerState mCurrentPlayState = SuperPlayerDef.PlayerState.END; // 当前播放状态
|
|
|
|
|
|
private Bitmap mBackgroundBmp; // 背景图
|
|
private Bitmap mBackgroundBmp; // 背景图
|
|
- private boolean mLockScreen; // 是否锁屏
|
|
|
|
|
|
|
|
- private boolean mIsOpenGesture = true; // 是否开启手势
|
|
|
|
private boolean isDestroy = false; // Activity是否被销毁
|
|
private boolean isDestroy = false; // Activity是否被销毁
|
|
|
|
|
|
public FullScreenPlayer(Context context) {
|
|
public FullScreenPlayer(Context context) {
|
|
@@ -73,143 +63,22 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
*/
|
|
*/
|
|
private void initialize(Context context) {
|
|
private void initialize(Context context) {
|
|
initView(context);
|
|
initView(context);
|
|
- mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
|
|
|
|
- @Override
|
|
|
|
- public boolean onDoubleTap(MotionEvent e) {
|
|
|
|
- if (mLockScreen) return false;
|
|
|
|
- togglePlayState();
|
|
|
|
- show();
|
|
|
|
- if (mHideViewRunnable != null) {
|
|
|
|
- removeCallbacks(mHideViewRunnable);
|
|
|
|
- postDelayed(mHideViewRunnable, 7000);
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public boolean onSingleTapConfirmed(MotionEvent e) {
|
|
|
|
- toggle();
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public boolean onScroll(MotionEvent downEvent, MotionEvent moveEvent, float distanceX, float distanceY) {
|
|
|
|
- if (mLockScreen) return false;
|
|
|
|
- if (downEvent == null || moveEvent == null) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- if (mVideoGestureDetector != null && mGestureVolumeBrightnessProgressLayout != null) {
|
|
|
|
- mVideoGestureDetector.check(mGestureVolumeBrightnessProgressLayout.getHeight(), downEvent, moveEvent, distanceX, distanceY);
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public boolean onDown(MotionEvent e) {
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- mGestureDetector.setIsLongpressEnabled(false);
|
|
|
|
-
|
|
|
|
- mVideoGestureDetector = new VideoGestureDetector(getContext());
|
|
|
|
- mVideoGestureDetector.setVideoGestureListener(new VideoGestureDetector.VideoGestureListener() {
|
|
|
|
- @Override
|
|
|
|
- public void onBrightnessGesture(float newBrightness) {
|
|
|
|
- if (mGestureVolumeBrightnessProgressLayout != null) {
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.setProgress((int) (newBrightness * 100));
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.setImageResource(R.drawable.superplayer_ic_light_max);
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.show();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void onVolumeGesture(float volumeProgress) {
|
|
|
|
- if (mGestureVolumeBrightnessProgressLayout != null) {
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.setImageResource(R.drawable.superplayer_ic_volume_max);
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.setProgress((int) volumeProgress);
|
|
|
|
- mGestureVolumeBrightnessProgressLayout.show();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void onSeekGesture(int progress) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 初始化view
|
|
* 初始化view
|
|
*/
|
|
*/
|
|
private void initView(Context context) {
|
|
private void initView(Context context) {
|
|
- mHideLockViewRunnable = new HideLockViewRunnable(this);
|
|
|
|
LayoutInflater.from(context).inflate(R.layout.superplayer_vod_player_fullscreen, this);
|
|
LayoutInflater.from(context).inflate(R.layout.superplayer_vod_player_fullscreen, this);
|
|
|
|
|
|
mIvLock = (ImageView) findViewById(R.id.superplayer_iv_lock);
|
|
mIvLock = (ImageView) findViewById(R.id.superplayer_iv_lock);
|
|
- mImageCover = (ImageView) findViewById(R.id.superplayer_cover_view);
|
|
|
|
- mImageStartAndResume = (ImageView) findViewById(R.id.superplayer_resume);
|
|
|
|
-
|
|
|
|
- mImageStartAndResume.setOnClickListener(this);
|
|
|
|
mIvLock.setOnClickListener(this);
|
|
mIvLock.setOnClickListener(this);
|
|
- mGestureVolumeBrightnessProgressLayout = (VolumeBrightnessProgressLayout) findViewById(R.id.superplayer_gesture_progress);
|
|
|
|
- mGestureVideoProgressLayout = (VideoProgressLayout) findViewById(R.id.superplayer_video_progress_layout);
|
|
|
|
- }
|
|
|
|
|
|
|
|
- public void setPlayNextButtonVisibility(boolean isShowing) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 切换播放状态
|
|
|
|
- * <p>
|
|
|
|
- * 双击和点击播放/暂停按钮会触发此方法
|
|
|
|
- */
|
|
|
|
- private void togglePlayState() {
|
|
|
|
- switch (mCurrentPlayState) {
|
|
|
|
- case INIT:
|
|
|
|
- case PAUSE:
|
|
|
|
- case END:
|
|
|
|
- if (mControllerCallback != null) {
|
|
|
|
- mControllerCallback.onResume();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case PLAYING:
|
|
|
|
- case LOADING:
|
|
|
|
- if (mControllerCallback != null) {
|
|
|
|
- mControllerCallback.onPause();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- show();
|
|
|
|
|
|
+ mImageCover = (ImageView) findViewById(R.id.superplayer_cover_view);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public void setPlayNextButtonVisibility(boolean isShowing) {
|
|
|
|
|
|
- /**
|
|
|
|
- * 切换自身的可见性
|
|
|
|
- */
|
|
|
|
- private void toggle() {
|
|
|
|
- if (!mLockScreen) {
|
|
|
|
- if (isShowing) {
|
|
|
|
- hide();
|
|
|
|
- } else {
|
|
|
|
- show();
|
|
|
|
- if (mHideViewRunnable != null) {
|
|
|
|
- removeCallbacks(mHideViewRunnable);
|
|
|
|
- postDelayed(mHideViewRunnable, 7000);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- mIvLock.setVisibility(VISIBLE);
|
|
|
|
- if (mHideLockViewRunnable != null) {
|
|
|
|
- removeCallbacks(mHideLockViewRunnable);
|
|
|
|
- postDelayed(mHideLockViewRunnable, 7000);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void updateStartUI(boolean isAutoPlay) {
|
|
|
|
- toggleView(mImageStartAndResume, !isAutoPlay);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public void preparePlayVideo(SuperPlayerModel superPlayerModel) {
|
|
public void preparePlayVideo(SuperPlayerModel superPlayerModel) {
|
|
@@ -222,7 +91,6 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
}
|
|
}
|
|
toggleView(mImageCover, true);
|
|
toggleView(mImageCover, true);
|
|
updateVideoProgress(0, superPlayerModel.duration);
|
|
updateVideoProgress(0, superPlayerModel.duration);
|
|
- updateStartUI(superPlayerModel.playAction == SuperPlayerModel.PLAY_ACTION_AUTO_PLAY);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -231,9 +99,6 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
@Override
|
|
@Override
|
|
public void show() {
|
|
public void show() {
|
|
isShowing = true;
|
|
isShowing = true;
|
|
- if (mHideLockViewRunnable != null) {
|
|
|
|
- removeCallbacks(mHideLockViewRunnable);
|
|
|
|
- }
|
|
|
|
mIvLock.setVisibility(VISIBLE);
|
|
mIvLock.setVisibility(VISIBLE);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -254,36 +119,16 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
isDestroy = true;
|
|
isDestroy = true;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
public void toggleCoverView(boolean isVisible) {
|
|
public void toggleCoverView(boolean isVisible) {
|
|
toggleView(mImageCover, isVisible);
|
|
toggleView(mImageCover, isVisible);
|
|
}
|
|
}
|
|
|
|
|
|
public void prepareLoading() {
|
|
public void prepareLoading() {
|
|
- toggleView(mImageStartAndResume, false);
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void updatePlayState(SuperPlayerDef.PlayerState playState) {
|
|
public void updatePlayState(SuperPlayerDef.PlayerState playState) {
|
|
- switch (playState) {
|
|
|
|
- case INIT:
|
|
|
|
- mIvPause.setImageResource(R.drawable.superplayer_ic_vod_play_normal);
|
|
|
|
- break;
|
|
|
|
- case PLAYING:
|
|
|
|
- mIvPause.setImageResource(R.drawable.superplayer_ic_vod_pause_normal);
|
|
|
|
- toggleView(mImageStartAndResume, false);
|
|
|
|
- break;
|
|
|
|
- case LOADING:
|
|
|
|
- mIvPause.setImageResource(R.drawable.superplayer_ic_vod_pause_normal);
|
|
|
|
- break;
|
|
|
|
- case PAUSE:
|
|
|
|
- mIvPause.setImageResource(R.drawable.superplayer_ic_vod_play_normal);
|
|
|
|
- toggleView(mImageStartAndResume, true);
|
|
|
|
- break;
|
|
|
|
- case END:
|
|
|
|
- mIvPause.setImageResource(R.drawable.superplayer_ic_vod_play_normal);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
mCurrentPlayState = playState;
|
|
mCurrentPlayState = playState;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -310,14 +155,16 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public boolean onTouchEvent(MotionEvent event) {
|
|
public boolean onTouchEvent(MotionEvent event) {
|
|
- if (mIsOpenGesture && mGestureDetector != null) {
|
|
|
|
- mGestureDetector.onTouchEvent(event);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
|
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
|
- removeCallbacks(mHideViewRunnable);
|
|
|
|
|
|
+ if (isShowing) {
|
|
|
|
+ hide();
|
|
|
|
+ } else {
|
|
|
|
+ show();
|
|
|
|
+ }
|
|
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
|
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
|
- postDelayed(mHideViewRunnable, 7000);
|
|
|
|
|
|
+ if (isShowing) {
|
|
|
|
+ postDelayed(mHideViewRunnable, HIDDEN_DELAY);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -328,74 +175,10 @@ public class FullScreenPlayer extends AbsPlayer implements View.OnClickListener
|
|
@Override
|
|
@Override
|
|
public void onClick(View view) {
|
|
public void onClick(View view) {
|
|
int i = view.getId();
|
|
int i = view.getId();
|
|
- if (i == R.id.superplayer_iv_back || i == R.id.superplayer_tv_title_full_screen) { //顶部标题栏
|
|
|
|
- if (mControllerCallback != null) {
|
|
|
|
- mControllerCallback.onBackPressed(SuperPlayerDef.PlayerMode.FULLSCREEN);
|
|
|
|
- }
|
|
|
|
- } else if (i == R.id.superplayer_iv_pause || i == R.id.superplayer_resume) { //暂停\播放按钮
|
|
|
|
- togglePlayState();
|
|
|
|
- }else if (i == R.id.superplayer_iv_lock) { //锁屏按钮
|
|
|
|
- toggleLockState();
|
|
|
|
- } else if (i == R.id.superplayer_iv_play_next) {
|
|
|
|
- if (mControllerCallback != null) {
|
|
|
|
- mControllerCallback.playNext();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 切换锁屏状态
|
|
|
|
- */
|
|
|
|
- private void toggleLockState() {
|
|
|
|
- mLockScreen = !mLockScreen;
|
|
|
|
- mIvLock.setVisibility(VISIBLE);
|
|
|
|
- if (mHideLockViewRunnable != null) {
|
|
|
|
- removeCallbacks(mHideLockViewRunnable);
|
|
|
|
- postDelayed(mHideLockViewRunnable, 7000);
|
|
|
|
- }
|
|
|
|
- if (mLockScreen) {
|
|
|
|
- mIvLock.setImageResource(R.drawable.superplayer_ic_player_lock);
|
|
|
|
- hide();
|
|
|
|
- mIvLock.setVisibility(VISIBLE);
|
|
|
|
- } else {
|
|
|
|
- mIvLock.setImageResource(R.drawable.superplayer_ic_player_unlock);
|
|
|
|
- show();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 重播
|
|
|
|
- */
|
|
|
|
- private void replay() {
|
|
|
|
- if (mControllerCallback != null) {
|
|
|
|
- mControllerCallback.onResume();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void disableGesture(boolean flag) {
|
|
|
|
- this.mIsOpenGesture = !flag;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- * 刷新缓存列表的视频缓存状态
|
|
|
|
- */
|
|
|
|
- public void checkIsNeedRefreshCacheMenu() {
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 隐藏锁屏按钮的runnable
|
|
|
|
- */
|
|
|
|
- private static class HideLockViewRunnable implements Runnable {
|
|
|
|
- private WeakReference<FullScreenPlayer> mWefControllerFullScreen;
|
|
|
|
-
|
|
|
|
- public HideLockViewRunnable(FullScreenPlayer controller) {
|
|
|
|
- mWefControllerFullScreen = new WeakReference<>(controller);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void run() {
|
|
|
|
- if (mWefControllerFullScreen != null && mWefControllerFullScreen.get() != null) {
|
|
|
|
- mWefControllerFullScreen.get().mIvLock.setVisibility(GONE);
|
|
|
|
|
|
+ if (i == R.id.superplayer_iv_lock) { //锁屏按钮
|
|
|
|
+ if (mControllerCallback != null) {
|
|
|
|
+ mControllerCallback.onSwitchPlayMode(SuperPlayerDef.PlayerMode.WINDOW);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|