package com.application.zhangshi_app_android.ui;
|
|
import android.annotation.TargetApi;
|
import android.app.Activity;
|
import android.content.Intent;
|
import android.content.pm.ActivityInfo;
|
import android.os.Build;
|
import android.os.Handler;
|
import android.transition.Transition;
|
import android.view.View;
|
import android.widget.ImageView;
|
|
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityOptionsCompat;
|
import androidx.core.util.Pair;
|
import androidx.core.view.ViewCompat;
|
|
import com.android.app_base.base.BaseConfig;
|
import com.android.app_base.base.view.BaseActivity;
|
import com.android.app_base.utils.GlideUtil;
|
import com.application.zhangshi_app_android.R;
|
import com.application.zhangshi_app_android.databinding.ActivityPlayBinding;
|
import com.shuyu.gsyvideoplayer.GSYVideoManager;
|
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
|
|
/**
|
* @author Ljj
|
* @date 2023.09.04. 15:59
|
* @desc 视频播放 Activity
|
*/
|
public class PlayerActivity extends BaseActivity<ActivityPlayBinding,SimpleViewModel> {
|
public final static String IMG_TRANSITION = "IMG_TRANSITION";
|
public final static String TRANSITION = "TRANSITION";
|
public final static String VIDEO_URL = "VIDEO_URL";
|
OrientationUtils orientationUtils;
|
|
private boolean isTransition;
|
private String videoUrl;
|
|
private Transition transition;
|
@Override
|
public int getLayoutId() {
|
return R.layout.activity_play;
|
}
|
|
@Override
|
public int getVariableId() {
|
return 0;
|
}
|
|
@Override
|
public void initParam() {
|
|
}
|
|
@Override
|
public void initView() {
|
isTransition = getIntent().getBooleanExtra(TRANSITION, false);
|
videoUrl = getIntent().getStringExtra(VIDEO_URL);
|
init();
|
}
|
|
private void init() {
|
if (videoUrl == null) {
|
return;
|
}
|
|
binding.videoPlayer.setUp(videoUrl, true, "");
|
|
//增加封面
|
ImageView imageView = new ImageView(this);
|
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
GlideUtil.loadVideoCover(videoUrl,imageView,-1,0);
|
binding.videoPlayer.setThumbImageView(imageView);
|
|
//增加title
|
binding.videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
|
//videoPlayer.setShowPauseCover(false);
|
|
//videoPlayer.setSpeed(2f);
|
|
//设置返回键
|
binding.videoPlayer.getBackButton().setVisibility(View.VISIBLE);
|
|
//设置旋转
|
orientationUtils = new OrientationUtils(this, binding.videoPlayer);
|
|
//设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
|
binding.videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
// ------- !!!如果不需要旋转屏幕,可以不调用!!!-------
|
// 不需要屏幕旋转,还需要设置 setNeedOrientationUtils(false)
|
orientationUtils.resolveByClick();
|
}
|
});
|
|
// binding.videoPlayer.setBottomProgressBarDrawable(getResources().getDrawable(R.drawable.video_new_progress));
|
// binding.videoPlayer.setDialogVolumeProgressBar(getResources().getDrawable(R.drawable.video_new_volume_progress_bg));
|
// binding.videoPlayer.setDialogProgressBar(getResources().getDrawable(R.drawable.video_new_progress));
|
// binding.videoPlayer.setBottomShowProgressBarDrawable(getResources().getDrawable(R.drawable.video_new_seekbar_progress),
|
// binding.getResources().getDrawable(R.drawable.video_new_seekbar_thumb));
|
// binding.videoPlayer.setDialogProgressColor(getResources().getColor(R.color.colorAccent), -11);
|
|
//是否可以滑动调整
|
binding.videoPlayer.setIsTouchWiget(true);
|
|
//设置返回按键功能
|
binding.videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
onBackPressed();
|
}
|
});
|
|
//过渡动画
|
initTransition();
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
binding.videoPlayer.onVideoPause();
|
}
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
binding.videoPlayer.onVideoResume();
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
if (orientationUtils != null)
|
orientationUtils.releaseListener();
|
}
|
|
@Override
|
public void onBackPressed() {
|
//先返回正常状态
|
if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
|
binding.videoPlayer.getFullscreenButton().performClick();
|
return;
|
}
|
//释放所有
|
binding.videoPlayer.setVideoAllCallBack(null);
|
GSYVideoManager.releaseAllVideos();
|
if (isTransition && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
super.onBackPressed();
|
} else {
|
new Handler().postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
finish();
|
overridePendingTransition(androidx.appcompat.R.anim.abc_fade_in, androidx.appcompat.R.anim.abc_fade_out);
|
}
|
}, 500);
|
}
|
}
|
|
|
private void initTransition() {
|
if (isTransition && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
postponeEnterTransition();
|
ViewCompat.setTransitionName(binding.videoPlayer, IMG_TRANSITION);
|
addTransitionListener();
|
startPostponedEnterTransition();
|
} else {
|
binding.videoPlayer.startPlayLogic();
|
}
|
}
|
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
private boolean addTransitionListener() {
|
transition = getWindow().getSharedElementEnterTransition();
|
if (transition != null) {
|
transition.addListener(new Transition.TransitionListener() {
|
@Override
|
public void onTransitionStart(Transition transition) {
|
|
}
|
|
@Override
|
public void onTransitionEnd(Transition transition) {
|
binding.videoPlayer.startPlayLogic();
|
transition.removeListener(this);
|
}
|
|
@Override
|
public void onTransitionCancel(Transition transition) {
|
|
}
|
|
@Override
|
public void onTransitionPause(Transition transition) {
|
|
}
|
|
@Override
|
public void onTransitionResume(Transition transition) {
|
|
}
|
});
|
return true;
|
}
|
return false;
|
}
|
@Override
|
public void initData() {
|
|
}
|
|
@Override
|
public void initLiveDataObserve() {
|
|
}
|
|
/**
|
* 启动播放界面
|
* @param activity 启动的activity
|
* @param url 视频地址
|
* @param view 过渡动画的起点view
|
* @param isTransition 是否有过渡动画
|
*/
|
public static void start(Activity activity, String url, View view, boolean isTransition){
|
Intent intent = new Intent(activity, PlayerActivity.class);
|
intent.putExtra(PlayerActivity.TRANSITION, isTransition);
|
intent.putExtra(PlayerActivity.VIDEO_URL, url);
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
|
Pair pair = new Pair<>(view, PlayerActivity.IMG_TRANSITION);
|
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
|
activity, pair);
|
ActivityCompat.startActivity(activity, intent, activityOptions.toBundle());
|
} else {
|
activity.startActivity(intent);
|
activity.overridePendingTransition(androidx.appcompat.R.anim.abc_fade_in, androidx.appcompat.R.anim.abc_fade_out);
|
}
|
}
|
|
/**
|
* 启动播放界面(拼接完整的url)
|
* @param activity
|
* @param url
|
* @param view
|
* @param isTransition
|
*/
|
public static void startWrapUrl(Activity activity, String url, View view, boolean isTransition){
|
if (url.contains("profile/upload")) {//如果是上传到服务器的图片
|
//只取profile/upload以后的部分
|
url = url.substring(url.indexOf("profile/upload"));
|
url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
|
}
|
start(activity,url,view,isTransition);
|
}
|
}
|