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 { 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); } }