From 606cab9fe05b8549b47df14fb976d958114774c5 Mon Sep 17 00:00:00 2001 From: aibingbing Date: Mon, 11 Dec 2023 20:09:50 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=AE=A3=E4=BC=A0=E8=A7=86=E9=A2=91]=20refact?= =?UTF-8?q?or:=20=E5=AE=A3=E4=BC=A0=E8=A7=86=E9=A2=91=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E9=87=8D=E6=9E=84=20step1=20;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/module/wigets/video/AdsDatas.kt | 19 +- .../wigets/video/ImageVideoRotationView.kt | 44 --- .../module/wigets/video/MediaLoopPlayView.kt | 288 ++++++++++++++++++ .../wigets/video/VideoPlayerFragment.kt | 14 +- .../module/wigets/video/VideoPlayerView.kt | 287 +++-------------- .../main/res/layout/fragment_video_player.xml | 4 +- .../passenger/ui/video/PM2VideoFragment.kt | 4 +- .../ui/widget/video/AdvancePagerAdapter.kt | 8 +- .../ui/widget/video/ImageAndVideoRotation.kt | 5 +- 9 files changed, 363 insertions(+), 310 deletions(-) delete mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/ImageVideoRotationView.kt create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/MediaLoopPlayView.kt diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/AdsDatas.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/AdsDatas.kt index 777f13a502..c159360ffe 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/AdsDatas.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/AdsDatas.kt @@ -1,10 +1,23 @@ package com.mogo.och.common.module.wigets.video -data class AdsDatas(val ads:MutableList) +data class AdsDatas(val ads: MutableList) -data class RotationItem( +data class MediaItem( var path: String, var type: Int, var cacheImgPath: String, var title: String -) +) { + companion object { + const val MEDIA_TYPE_IMAGE = 0 + const val MEDIA_TYPE_VIDEO = 1 + } + + fun isImageType(): Boolean { + return this.type == MEDIA_TYPE_IMAGE + } + + fun isVideoType(): Boolean { + return this.type == MEDIA_TYPE_VIDEO + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/ImageVideoRotationView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/ImageVideoRotationView.kt deleted file mode 100644 index cdf8741b67..0000000000 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/ImageVideoRotationView.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.mogo.och.common.module.wigets.video - -import AdvancePagerAdapter -import AdvanceViewPager -import android.annotation.SuppressLint -import android.content.Context -import android.util.AttributeSet -import android.widget.RelativeLayout - -class ImageVideoRotationView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null -) : RelativeLayout(context, attrs) { - - private var viewPager: AdvanceViewPager? = null - private var pagerAdapter: AdvancePagerAdapter? = null - - companion object { - const val TAG = "ImageAndVideoRotation" - } - - init { - initView() - } - - @SuppressLint("ClickableViewAccessibility") - private fun initView() { - viewPager = AdvanceViewPager(context) - pagerAdapter = AdvancePagerAdapter(context, viewPager!!) - viewPager?.adapter = pagerAdapter - addView(viewPager, LayoutParams(-1, -1)) - } - - fun setData(list: MutableList) { - pagerAdapter?.setData(list) - } - - fun setPause() { - pagerAdapter?.setPause() - } - - fun setResume() { - pagerAdapter?.setResume() - } -} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/MediaLoopPlayView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/MediaLoopPlayView.kt new file mode 100644 index 0000000000..5a5b7d9b45 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/MediaLoopPlayView.kt @@ -0,0 +1,288 @@ +package com.mogo.och.common.module.wigets.video + +import AdvanceImageView +import AdvanceVideoView +import android.content.Context +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.widget.RelativeLayout +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.CountDownTimer +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack + +class MediaLoopPlayView @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : RelativeLayout(context, attrs) { + + companion object { + const val TAG = "MediaLoopPlayView" + } + + private var viewPager: AdvanceViewPager? = null + private var pagerAdapter: AdvancePagerAdapter? = null + + init { + initView() + } + + private fun initView() { + viewPager = AdvanceViewPager(context) + pagerAdapter = AdvancePagerAdapter(context, viewPager!!) + viewPager?.adapter = pagerAdapter + addView(viewPager, LayoutParams(-1, -1)) + } + + fun setMediaData(list: MutableList) { + pagerAdapter?.setMediaData(list) + } + + fun setPause() { + pagerAdapter?.setPause() + } + + fun setResume() { + pagerAdapter?.setResume() + } +} + +class AdvanceViewPager : ViewPager { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + + override fun onTouchEvent(ev: MotionEvent?): Boolean { + return false + } + + override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { + return false + } +} + +class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter(), + ViewPager.OnPageChangeListener { + + private val mContext: Context = context + private val mViewPager: ViewPager = viewPager + + private var mDataList = mutableListOf() + private var mItemViewList = mutableListOf() + + private var mLastViewPagerPosition = -1 + private var mImageCountDownTimer: CountDownTimer? = null + + fun setMediaData(list: MutableList) { + if (list.isEmpty()) { + CallerLogger.d(MediaLoopPlayView.TAG, "setMediaData, list为空") + return + } + + mDataList.addAll(list) + mItemViewList.clear() + list.forEach { + addItemView(it) + } + + mViewPager.addOnPageChangeListener(this) + notifyDataSetChanged() + mViewPager.currentItem = 0 + + if (mItemViewList.size > 0) { + startLoopPlay() + } + } + + override fun getCount(): Int { + return mDataList.size + } + + override fun isViewFromObject(view: View, `object`: Any): Boolean { + return view === `object` + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + container.removeView(mItemViewList[position]) + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view: View = mItemViewList[position] + container.addView(view) + return view + } + + override fun getItemPosition(`object`: Any): Int { + return POSITION_NONE + } + + private fun addItemView(item: MediaItem) { + if (item.isImageType()) { + val imageView = AdvanceImageView(mContext) + imageView.setImagePath(item.path) + mItemViewList.add(imageView) + } else if (item.isVideoType()) { + val videoView = AdvanceVideoView(mContext) + videoView.setVideoPath(item.path, item.cacheImgPath) + mItemViewList.add(videoView) + } else { + CallerLogger.d(MediaLoopPlayView.TAG, "addItemView 不支持的文件类型:${item.type}") + } + } + + /** + * 开始播放循环 + * 1.如果是视频,开始播放视频,等到播放完成后根据media类型开始播放下一个 + * 2.如果是图片,展示图片,同时开始timer倒计时,倒计时完时根据media类型开始播放下一个 + */ + private fun startLoopPlay() { + val currentPosition = mViewPager.currentItem + val currentMediaItem = mDataList[currentPosition] + if (mItemViewList[currentPosition] is AdvanceVideoView) { + CallerLogger.d( + MediaLoopPlayView.TAG, + "startLoopPlay: AdvanceVideoView, url=${currentMediaItem.path}" + ) + val videoView = mItemViewList[currentPosition] as AdvanceVideoView + videoView.setCacheImageViewVisible() + videoView.setVideo(videoPlayLifecycleCallBack) + } else if (mItemViewList[currentPosition] is AdvanceImageView) { + CallerLogger.d( + MediaLoopPlayView.TAG, + "startLoopPlay: AdvanceImageView, url=${currentMediaItem.path}" + ) + startImageCountDownTimer() + } else { + CallerLogger.d( + MediaLoopPlayView.TAG, + "startLoopPlay 不支持的文件类型:${currentMediaItem.type}, url=${currentMediaItem.path}" + ) + } + } + + private var videoPlayLifecycleCallBack = object : GSYSampleCallBack() { + + override fun onPrepared(url: String?, vararg objects: Any?) { + CallerLogger.d(MediaLoopPlayView.TAG, "onPrepared") + } + + override fun onAutoComplete(url: String?, vararg objects: Any?) { + CallerLogger.d(MediaLoopPlayView.TAG, "onAutoComplete") + playNextItemView(false) + } + + override fun onPlayError(url: String?, vararg objects: Any?) { + super.onPlayError(url, *objects) + CallerLogger.d(MediaLoopPlayView.TAG, "onPlayError, error=${objects}") + playNextItemView(true) + } + } + + private fun startImageCountDownTimer() { + if (mImageCountDownTimer != null) { + mImageCountDownTimer?.cancel() + mImageCountDownTimer = null + } + mImageCountDownTimer = object : CountDownTimer(5000L, 1000L) { + override fun onTick(millisUntilFinished: Long) { + CallerLogger.d( + MediaLoopPlayView.TAG, + "mImageCountDownTimer倒计时秒, countDown=${millisUntilFinished / 1000}" + ) + } + + override fun onFinish() { + CallerLogger.d(MediaLoopPlayView.TAG, "mImageCountDownTimer倒计时秒, onFinish") + playNextItemView(false) + } + }.start() + } + + private fun cancelImageCountDownTimer() { + if (mImageCountDownTimer != null) { + mImageCountDownTimer?.cancel() + mImageCountDownTimer = null + } + } + + /** + * 根据当前item情况,播放下一个item + */ + private fun playNextItemView(isOnVideoError: Boolean) { + val currentPosition = mViewPager.currentItem + val currentMediaItem = mDataList[currentPosition] + val currentItemView = mItemViewList[currentPosition] + CallerLogger.d( + MediaLoopPlayView.TAG, + "playNextItemView, currentPosition=$currentPosition, type=${currentMediaItem.type}, url=${currentMediaItem.path}" + ) + if (currentItemView is AdvanceVideoView) { + currentItemView.onVideoReset() + //videoView.setCacheImageViewVisible() + if (isOnVideoError) { + currentItemView.clearLocalErrorVideo() + } + if (mItemViewList.size == 1) { + currentItemView.startPlay(currentMediaItem.path) + return + } + } + if (currentPosition == mItemViewList.size - 1) { + //已经到最后一个, 从头开始 + mViewPager.post { + mViewPager.setCurrentItem(0, true) + } + } else { + mViewPager.post { + mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) + } + } + } + + fun setPause() { + if (mItemViewList.size <= 0) { + return + } + val currentPosition = mViewPager.currentItem + if (mItemViewList[currentPosition] is AdvanceVideoView) { + val videoView = mItemViewList[mViewPager.currentItem] as AdvanceVideoView + videoView.setPause() + } else if (mItemViewList[currentPosition] is AdvanceImageView) { + cancelImageCountDownTimer() + } + } + + fun setResume() { + if (mItemViewList.size <= 0) { + return + } + val currentPosition = mViewPager.currentItem + if (mItemViewList[currentPosition] is AdvanceVideoView) { + val videoView = mItemViewList[mViewPager.currentItem] as AdvanceVideoView + videoView.setResume() + } else if (mItemViewList[currentPosition] is AdvanceImageView) { + startImageCountDownTimer() + } + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } + + override fun onPageSelected(position: Int) { + } + + override fun onPageScrollStateChanged(state: Int) { + if (state == 0) { //静止,什么都没做 + val currentPosition = mViewPager.currentItem + CallerLogger.d( + MediaLoopPlayView.TAG, + "onPageScrollStateChanged, state = $state, currentItem = $currentPosition, lastPosition = $mLastViewPagerPosition" + ) + if (mItemViewList.size > 1) { //多于1,才会循环跳转 + startLoopPlay() + mLastViewPagerPosition = currentPosition + } + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerFragment.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerFragment.kt index 1e1a3cbd17..3748d81cf8 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerFragment.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerFragment.kt @@ -6,7 +6,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.common.module.R -import kotlinx.android.synthetic.main.fragment_video_player.* +import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationView /** * @author: wangmingjun @@ -15,7 +15,11 @@ import kotlinx.android.synthetic.main.fragment_video_player.* class VideoPlayerFragment : MvpFragment() { - private var arrayListOf = mutableListOf() + companion object { + private val TAG = VideoPlayerFragment::class.java.simpleName + } + + private var arrayListOf = mutableListOf() override fun getLayoutId(): Int { return R.layout.fragment_video_player @@ -25,17 +29,13 @@ class VideoPlayerFragment : return VideoPlayerPresenter(this) } - companion object { - private val TAG = VideoPlayerFragment::class.java.simpleName - } - override fun getTagName(): String { return TAG } override fun initViews() { initResourceData() - imageVideoRotationView.setData(arrayListOf) + imageVideoRotationView.setMediaData(arrayListOf) } override fun onPause() { diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt index b61739f75b..520e2c2318 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt @@ -3,32 +3,24 @@ import android.content.Context import android.media.AudioManager import android.net.Uri import android.util.AttributeSet -import android.view.MotionEvent -import android.view.View -import android.view.ViewGroup import android.widget.ImageView import android.widget.RelativeLayout -import androidx.viewpager.widget.PagerAdapter -import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import com.mogo.eagle.core.utilcode.download.* import com.mogo.eagle.core.utilcode.download.callback.* -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.CountDownTimer import com.mogo.eagle.core.utilcode.util.FileUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.common.module.R -import com.mogo.och.common.module.wigets.video.ImageVideoRotationView -import com.mogo.och.common.module.wigets.video.RotationItem +import com.mogo.och.common.module.wigets.video.MediaLoopPlayView import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.utils.Debuger import com.shuyu.gsyvideoplayer.utils.GSYVideoType import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer +import me.jessyan.autosize.utils.AutoSizeUtils import java.io.File class AdvanceVideoView @JvmOverloads constructor( @@ -94,18 +86,18 @@ class AdvanceVideoView @JvmOverloads constructor( videoViewPlayer?.thumbImageView = cacheImage cacheImage?.setImageResource(R.drawable.video_holder) // setCacheImageViewVisible() - Logger.d(ImageVideoRotationView.TAG, "setVideoPath") - cacheImage?.let { - Glide.with(context).asBitmap().load(cacheImageUrl) - .apply( - RequestOptions().useUnlimitedSourceGeneratorsPool(true) - .placeholder(R.drawable.video_holder) - .error(R.drawable.video_holder) - .fallback(R.drawable.video_holder) - .centerCrop() - ) - .into(it) - } + Logger.d(MediaLoopPlayView.TAG, "setVideoPath") +// cacheImage?.let { +// Glide.with(context).asBitmap().load(cacheImageUrl) +// .apply( +// RequestOptions().useUnlimitedSourceGeneratorsPool(true) +// .placeholder(R.drawable.video_holder) +// .error(R.drawable.video_holder) +// .fallback(R.drawable.video_holder) +// .centerCrop() +// ) +// .into(it) +// } } fun clearLocalErrorVideo() { @@ -131,16 +123,16 @@ class AdvanceVideoView @JvmOverloads constructor( fun setVideo(onCompletionListener: GSYSampleCallBack) { loadCacheImg() - Logger.d(ImageVideoRotationView.TAG, "setVideo") + Logger.d(MediaLoopPlayView.TAG, "setVideo") mOnCompletionListener = onCompletionListener //判断是否已经下载 if (downloadVideoName.isNotEmpty()) { Logger.d( - ImageVideoRotationView.TAG, + MediaLoopPlayView.TAG, "video local url = $mVideoDirPath$downloadVideoName" ) if (FileUtils.isFileExists(mVideoDirPath + downloadVideoName)) { - Logger.d(ImageVideoRotationView.TAG, "have cache startPlay") + Logger.d(MediaLoopPlayView.TAG, "have cache startPlay") startPlay(Uri.fromFile(File(mVideoDirPath + downloadVideoName)).toString()) return } @@ -150,15 +142,20 @@ class AdvanceVideoView @JvmOverloads constructor( private fun startDownLoadVideo() { //下载视频, 下载成功后再播放 - Logger.d(ImageVideoRotationView.TAG, "startDownLoadVideo") + Logger.d(MediaLoopPlayView.TAG, "startDownLoadVideo") FileUtils.createFileDir(mVideoDirPath) - DownloadUtils.downLoad( - context, fileNetPath!!, mVideoDirPath!!, downloadVideoName, downListener) + val downloadUrl = fileNetPath + val downloadDir = mVideoDirPath + if (downloadUrl != null && downloadDir != null) { + DownloadUtils.downLoad( + context, downloadUrl, downloadDir, downloadVideoName, downListener + ) + } } fun startPlay(localVideoPath: String?) { try { - Logger.d(ImageVideoRotationView.TAG, "startPlay") + Logger.d(MediaLoopPlayView.TAG, "startPlay") gsyVideoOptionBuilder = GSYVideoOptionBuilder() gsyVideoOptionBuilder ?.setUrl( @@ -173,7 +170,7 @@ class AdvanceVideoView @JvmOverloads constructor( videoViewPlayer?.setVideoAllCallBack(mOnCompletionListener) videoViewPlayer?.startPlayLogic() } catch (e: Exception) { - Logger.d(ImageVideoRotationView.TAG, "startPlay e = ${e.message}") + Logger.d(MediaLoopPlayView.TAG, "startPlay e = ${e.message}") } } @@ -198,15 +195,15 @@ class AdvanceVideoView @JvmOverloads constructor( override fun onStart(url: String) { setCacheImageViewVisible() - Logger.d(ImageVideoRotationView.TAG, "download-onStart") + Logger.d(MediaLoopPlayView.TAG, "download-onStart") } override fun onProgress(url: String, downloaded: Long, total: Long) { - Logger.d(ImageVideoRotationView.TAG, "download-onProgress== ${ (downloaded * 100 / total).toInt() }") + Logger.d(MediaLoopPlayView.TAG, "download-onProgress== ${ (downloaded * 100 / total).toInt() }") } override fun onFinished(url: String, path: String) { - Logger.d(ImageVideoRotationView.TAG, "download-onFinished = $url") + Logger.d(MediaLoopPlayView.TAG, "download-onFinished = $url") if (url == fileNetPath) { //发现下载工具在断网又连网后,已完成的任务又都下载,跳转播放出现问题 //下载完成 ThreadUtils.runOnUiThread { @@ -214,11 +211,11 @@ class AdvanceVideoView @JvmOverloads constructor( } } else {//如果当前文件不存在再次去下载当前的 Logger.d( - ImageVideoRotationView.TAG, "download-onFinished = not current" + + MediaLoopPlayView.TAG, "download-onFinished = not current" + ",currentUrl = $fileNetPath " ) if (FileUtils.isFileExists(path)) { - Logger.d(ImageVideoRotationView.TAG, "have download startPlay") + Logger.d(MediaLoopPlayView.TAG, "have download startPlay") ThreadUtils.runOnUiThread { startPlay(Uri.fromFile(File(path)).toString()) } @@ -230,220 +227,13 @@ class AdvanceVideoView @JvmOverloads constructor( } override fun onError(url: String, error: String?) { - Logger.d(ImageVideoRotationView.TAG, "download-onError-$error") + Logger.d(MediaLoopPlayView.TAG, "download-onError-$error") //出错再次下载 startDownLoadVideo() } } } -class AdvanceViewPager : ViewPager { - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - - override fun onTouchEvent(ev: MotionEvent?): Boolean { - return false - } - - override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { - return false - } -} - -class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter(), - ViewPager.OnPageChangeListener { - private val mContext: Context = context - private val mViewPager: ViewPager = viewPager - - private var dataList = mutableListOf() - private var viewList = mutableListOf() - - private var lastPosition = -1 - - private var current = 0 - private val time = 5000 - private var pause = false - private var countDownTimer: CountDownTimer? = null - - fun setData(list: MutableList) { - if (list.isEmpty()) return - dataList.addAll(list) - viewList.clear() - list.forEach { - addView(it) - } - - mViewPager.addOnPageChangeListener(this) - notifyDataSetChanged() - mViewPager.currentItem = 0 - - if (viewList.size > 0) { - if (viewList[mViewPager.currentItem] is AdvanceVideoView) {//有人反应第一个是视频不播放这边优化了一下 - Logger.d(ImageVideoRotationView.TAG, "第一个是视频") - val video = viewList[mViewPager.currentItem] as AdvanceVideoView - video.setVideo(gsySampleCallBack) - } else if (viewList[mViewPager.currentItem] is AdvanceImageView) { - Logger.d(ImageVideoRotationView.TAG, "startTimer()_1") - current = 0//换页重新计算时间 - startTimer() - } - } - } - - override fun getCount(): Int { - return dataList.size - } - - override fun isViewFromObject(view: View, `object`: Any): Boolean { - return view === `object` - } - - override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { - container.removeView(viewList[position]) - } - - override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view: View = viewList[position] - container.addView(view) - return view - } - - override fun getItemPosition(`object`: Any): Int { - return POSITION_NONE - } - - private fun addView(item: RotationItem) { - if (item.type == 1) { // 表示视频 - val videoView = AdvanceVideoView(mContext) - videoView.setVideoPath(item.path, item.cacheImgPath) - viewList.add(videoView) - } else { // 表示图片 - val imageView = AdvanceImageView(mContext) - imageView.setImagePath(item.path) - viewList.add(imageView) - } - } - - fun setPause() { - pause = true - if (viewList.size > 0 && viewList[mViewPager.currentItem] is AdvanceVideoView) { - val videoView = viewList[mViewPager.currentItem] as AdvanceVideoView - videoView.setPause() - } - } - - fun setResume() { - pause = false - if (viewList.size > 0 && viewList[mViewPager.currentItem] is AdvanceVideoView) { - val videoView = viewList[mViewPager.currentItem] as AdvanceVideoView - videoView.setResume() - } - } - - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - } - - override fun onPageSelected(position: Int) { - } - - override fun onPageScrollStateChanged(state: Int) { - // 由于viewpager的预加载机制onPageSelected这里面加载videoview 放的跟玩一样 等操作完成后再播放videoview就香了 很丝滑 - if (state == 0) { //静止,什么都没做 - val currentItem = mViewPager.currentItem - Logger.d( - ImageVideoRotationView.TAG, - "state = $state currentItem = $currentItem lastPosition = $lastPosition" - ) - if (viewList.size > 1) { //多于1,才会循环跳转 - if (viewList[mViewPager.currentItem] is AdvanceVideoView) { - val videoView = (viewList[mViewPager.currentItem] as AdvanceVideoView) - videoView.setCacheImageViewVisible() - videoView.setVideo(gsySampleCallBack) - } else if (viewList[mViewPager.currentItem] is AdvanceImageView) { - Logger.d(ImageVideoRotationView.TAG, "startTimer()") - current = 0//换页重新计算时间 - startTimer() - } - lastPosition = mViewPager.currentItem - } - } - } - - private var gsySampleCallBack = object : GSYSampleCallBack() { - - override fun onPrepared(url: String?, vararg objects: Any?) { - Logger.d(ImageVideoRotationView.TAG, "onPrepared") -// if (viewList[mViewPager.currentItem] is AdvanceVideoView) { -// val videoView = (viewList[mViewPager.currentItem] as AdvanceVideoView) -// UiThreadHandler.postDelayed(Runnable { -// videoView.setCacheImageViewGone() -// }, 1000) -// } - } - - override fun onAutoComplete(url: String?, vararg objects: Any?) { - Logger.d(ImageVideoRotationView.TAG, "onAutoComplete()") - if (viewList[mViewPager.currentItem] is AdvanceVideoView) { - val videoView = (viewList[mViewPager.currentItem] as AdvanceVideoView) - videoView.onVideoReset() - if (viewList.size == 1){ - videoView.startPlay(url) - }else{ - goNextItemView() - - } - } - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - Logger.d(ImageVideoRotationView.TAG, "onPlayError()-${objects}") - if (viewList[mViewPager.currentItem] is AdvanceVideoView) { - val videoView = (viewList[mViewPager.currentItem] as AdvanceVideoView) - videoView.onVideoReset() -// videoView.setCacheImageViewVisible() - videoView.clearLocalErrorVideo() - goNextItemView() - } - } - } - - private fun startTimer() { - if (countDownTimer != null) { - countDownTimer?.cancel() - countDownTimer = null - } - countDownTimer = object : CountDownTimer(5000, 1000) { - override fun onTick(millisUntilFinished: Long) { - CallerLogger.d( - SceneConstant.M_BUS_P + "startTimer", - "倒计时秒 = ${millisUntilFinished / 1000}" - ) - } - - override fun onFinish() { - CallerLogger.d(ImageVideoRotationView.TAG + "startTimer", "5s到,跳转") - goNextItemView() - } - }.start() - } - - /** - * view 跳转 - */ - private fun goNextItemView() { - if (mViewPager.currentItem == viewList.size - 1) {//已经到最后一个 - mViewPager.post { - mViewPager.setCurrentItem(0, true) - } - } else { - mViewPager.post { - mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) - } - } - } -} - class AdvanceImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : RelativeLayout(context, attrs) { @@ -586,4 +376,13 @@ class AdvanceGSYVideoPlayer : StandardGSYVideoPlayer { private fun setNeedMute(isMute: Boolean){ gsyVideoManager?.player?.setNeedMute(isMute) } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + if (!mIfCurrentIsFullscreen) { + val dp2px = AutoSizeUtils.dp2px(context, 16f) + this.outlineProvider = TextureVideoViewOutlineProvider(dp2px.toFloat()) + this.clipToOutline = true + } + } } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/res/layout/fragment_video_player.xml b/OCH/mogo-och-common-module/src/main/res/layout/fragment_video_player.xml index 44c0c0702f..7144571ef4 100644 --- a/OCH/mogo-och-common-module/src/main/res/layout/fragment_video_player.xml +++ b/OCH/mogo-och-common-module/src/main/res/layout/fragment_video_player.xml @@ -2,11 +2,9 @@ - - - \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt index 6b6767c0e6..0d6923b72b 100644 --- a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt +++ b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt @@ -7,7 +7,7 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.presenter.PM2VideoPresenter import com.mogo.och.common.module.wigets.video.AdsDatas -import com.mogo.och.common.module.wigets.video.RotationItem +import com.mogo.och.common.module.wigets.video.MediaItem import kotlinx.android.synthetic.m2.p_m2_video_fragment.* /** @@ -17,7 +17,7 @@ import kotlinx.android.synthetic.m2.p_m2_video_fragment.* class PM2VideoFragment : MvpFragment() { - private var arrayListOf = mutableListOf() + private var arrayListOf = mutableListOf() override fun getLayoutId(): Int { return R.layout.p_m2_video_fragment diff --git a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt index 2d68d3b34d..4d1784a7c3 100644 --- a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt +++ b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt @@ -9,7 +9,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.CountDownTimer -import com.mogo.och.common.module.wigets.video.RotationItem +import com.mogo.och.common.module.wigets.video.MediaItem import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack /** @@ -22,7 +22,7 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter private val mContext: Context = context private val mViewPager: ViewPager = viewPager - private var dataList = mutableListOf() + private var dataList = mutableListOf() private var viewList = mutableListOf() private var lastPosition = -1 @@ -32,7 +32,7 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter private var pause = false private var countDownTimer: CountDownTimer? = null - fun setData(list: MutableList) { + fun setData(list: MutableList) { if (list.isEmpty()) return dataList.addAll(list) @@ -85,7 +85,7 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter return POSITION_NONE } - private fun addView(item: RotationItem) { + private fun addView(item: MediaItem) { if (item.type == 1) { // 表示视频 val videoView = AdvanceVideoView(mContext) videoView.setVideoPath(item.path,item.cacheImgPath) diff --git a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/ImageAndVideoRotation.kt b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/ImageAndVideoRotation.kt index 02205dd945..8b53b3d894 100644 --- a/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/ImageAndVideoRotation.kt +++ b/OCH/shuttle/passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/ImageAndVideoRotation.kt @@ -4,8 +4,7 @@ import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.widget.RelativeLayout -import androidx.viewpager.widget.ViewPager -import com.mogo.och.common.module.wigets.video.RotationItem +import com.mogo.och.common.module.wigets.video.MediaItem /** * @author: wangmingjun @@ -35,7 +34,7 @@ class ImageAndVideoRotation @JvmOverloads constructor( addView(viewPager, LayoutParams(-1, -1)) } - fun setData(list: MutableList){ + fun setData(list: MutableList){ pagerAdapter?.setData(list) }