From 77c49061a9a313f8c74575137d6d40cd67a9248c Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Fri, 10 Feb 2023 19:37:34 +0800 Subject: [PATCH] =?UTF-8?q?[M2]=201=E3=80=81=E5=9B=BE/=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E8=BD=AE=E6=92=AD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/ui/video/PM2VideoFragment.kt | 8 +- .../ui/widget/video/AdvancePagerAdapter.kt | 105 ++++++++++++------ .../ui/widget/video/AdvanceVideoView.kt | 55 ++++----- .../src/m2/res/layout/p_m2_video_fragment.xml | 2 +- 4 files changed, 105 insertions(+), 65 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt index 6d5f814176..a45b56dc64 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/video/PM2VideoFragment.kt @@ -34,17 +34,17 @@ class PM2VideoFragment : override fun initViews() { initResourceData() - image_video_rotation_view.setData(arrayListOf) + imageVideoRotationView.setData(arrayListOf) } override fun onPause() { super.onPause() - image_video_rotation_view.setPause() + imageVideoRotationView.setPause() } override fun onResume() { super.onResume() - image_video_rotation_view.setResume() + imageVideoRotationView.setResume() } private fun initResourceData() { @@ -52,7 +52,7 @@ class PM2VideoFragment : arrayListOf.add( RotationItem( "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4", - 0, + 1, "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png", "小宝宝" ) diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt index 0a2c745238..bc59905683 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvancePagerAdapter.kt @@ -5,28 +5,29 @@ import android.view.View import android.view.ViewGroup import androidx.viewpager.widget.PagerAdapter import androidx.viewpager.widget.ViewPager +import com.mogo.eagle.core.utilcode.mogo.logger.Logger /** * @author: wangmingjun * @date: 2023/2/6 */ -class AdvancePagerAdapter(context: Context, viewPager: ViewPager): PagerAdapter(), +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 dataList = mutableListOf() private var viewList = mutableListOf() private var lastPosition = -1 private var current = 0 private val time = 5000 - private val pause = false + private var pause = false private var thread: Thread? = null - fun setData(list: MutableList){ + fun setData(list: MutableList) { if (list.isEmpty()) return dataList.addAll(list) @@ -42,12 +43,19 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager): PagerAdapter( mViewPager.currentItem = 0 - if (list.size > 0) { - if (list[0].type == 1) {//有人反应第一个是视频不播放这边优化了一下 - var video = list[mViewPager.currentItem] as AdvanceVideoView + if (viewList.size > 0) { + if (viewList[mViewPager.currentItem] is AdvanceVideoView) {//有人反应第一个是视频不播放这边优化了一下 + Logger.d("onPageScrollStateChanged", "第一个是视频") + val video = viewList[mViewPager.currentItem] as AdvanceVideoView video.setVideo { - mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) + Logger.d("onPageScrollStateChanged", "视频播放完成") + video.setCacheImageView(dataList[mViewPager.currentItem].cacheImgPath) + goNextItemView() } + } else if (viewList[mViewPager.currentItem] is AdvanceImageView) { + Logger.d("onPageScrollStateChanged", "startTimer()_1") + current = 0//换页重新计算时间 + startTimer() } } } @@ -76,24 +84,32 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager): PagerAdapter( } private fun addView(item: RotationItem) { - if (item.type === 1) { // 表示视频 - var videoView = AdvanceVideoView(mContext) + if (item.type == 1) { // 表示视频 + val videoView = AdvanceVideoView(mContext) videoView.setCacheImageView(item.cacheImgPath) videoView.setVideoPath(item.path) viewList.add(videoView) } else { // 表示图片 - var imageView = AdvanceImageView(mContext) + val imageView = AdvanceImageView(mContext) imageView.setImagePath(item.path) viewList.add(imageView) } } - fun setPause(){ - + fun setPause() { + pause = true + if (viewList.size > 0 && viewList[mViewPager.currentItem] is AdvanceVideoView) { + val videoView = viewList[mViewPager.currentItem] as AdvanceVideoView + videoView.setPause() + } } - fun setResume(){ - + fun setResume() { + pause = false + if (viewList.size > 0 && viewList[mViewPager.currentItem] is AdvanceVideoView) { + val videoView = viewList[mViewPager.currentItem] as AdvanceVideoView + videoView.setRestart() + } } override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { @@ -105,26 +121,30 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager): PagerAdapter( override fun onPageScrollStateChanged(state: Int) { // 由于viewpager的预加载机制onPageSelected这里面加载videoview 放的跟玩一样 等操作完成后再播放videoview就香了 很丝滑 if (state == 0) { //静止,什么都没做 + val currentItem = mViewPager.currentItem + Logger.d( + "onPageScrollStateChanged", + "state = $state currentItem = $currentItem lastPosition = $lastPosition" + ) + if (viewList.size > 1) { //多于1,才会循环跳转 if (lastPosition != -1 && lastPosition != mViewPager.currentItem - && viewList[lastPosition] is AdvanceVideoView) { - var videoView: AdvanceVideoView = viewList[lastPosition] as AdvanceVideoView + && viewList[lastPosition] is AdvanceVideoView + ) { + val videoView: AdvanceVideoView = viewList[lastPosition] as AdvanceVideoView videoView.setPause() } - if (mViewPager.currentItem < 1) { //首位之前,跳转到末尾(N) - var position = dataList.size //注意这里是mList,而不是mViews - mViewPager.setCurrentItem(position, false) - } else if (mViewPager.currentItem > dataList.size) { //末位之后,跳转到首位(1) - mViewPager.setCurrentItem(1, false) //false:不显示跳转过程的动画 - } - current = 0//换页重新计算时间 - if (viewList[mViewPager.currentItem] is AdvanceVideoView) { - (viewList[mViewPager.currentItem] as AdvanceVideoView).setVideo { + if (viewList[mViewPager.currentItem] is AdvanceVideoView) { + val videoView = (viewList[mViewPager.currentItem] as AdvanceVideoView) + videoView.setVideo { + videoView.setCacheImageView(dataList[mViewPager.currentItem].cacheImgPath) mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) } - }else if (viewList[mViewPager.currentItem] is AdvanceImageView){ + } else if (viewList[mViewPager.currentItem] is AdvanceImageView) { + Logger.d("onPageScrollStateChanged", "startTimer()") + current = 0//换页重新计算时间 startTimer() } lastPosition = mViewPager.currentItem @@ -134,26 +154,45 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager): PagerAdapter( private fun startTimer() { if (null != thread && !thread?.isInterrupted!!) { + Logger.d("onPageScrollStateChanged", "thread.interrupt()") thread?.interrupt() thread = null } - thread = Thread{ + thread = Thread { while (null != thread && !thread?.isInterrupted!!) { try { + Logger.d("onPageScrollStateChanged", "sleep") Thread.sleep(1000) - if (!pause && viewList[mViewPager.currentItem] !is AdvanceVideoView) + if (viewList[mViewPager.currentItem] is AdvanceImageView) { + Logger.d("onPageScrollStateChanged", "增加1s") current += 1000 + } if (current >= time) { - mViewPager.post { - mViewPager.setCurrentItem(mViewPager.currentItem + 1, true) - } + Logger.d("onPageScrollStateChanged", "5s到,跳转") + goNextItemView() current = 0 + break } } catch (e: InterruptedException) { - e.printStackTrace(); + e.printStackTrace() } } } thread?.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) + } + } + } } \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvanceVideoView.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvanceVideoView.kt index 4872341d53..05c9b5bb15 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvanceVideoView.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/widget/video/AdvanceVideoView.kt @@ -76,6 +76,7 @@ class AdvanceVideoView @JvmOverloads constructor( } videoView?.setOnCompletionListener(onCompletionListener) + } fun setPause() { @@ -93,32 +94,32 @@ class AdvanceVideoView @JvmOverloads constructor( /** * 加载首帧,作为视频缓存显示的图片 */ - private fun loadCacheImage(){ - Thread { - var retriever = MediaMetadataRetriever() - var bitmap: Bitmap? = null - try { - if (path?.contains("http") == true){ - retriever.setDataSource(path, HashMap()) - }else{ - retriever.setDataSource(path) - } - bitmap = retriever.frameAtTime - }catch (ex: Exception){ - ex.printStackTrace() - }finally { - try { - retriever.release() - }catch (e: RuntimeException){ - e.printStackTrace() - } - } - - if (bitmap != null) { - UiThreadHandler.post { +// private fun loadCacheImage(){ +// Thread { +// var retriever = MediaMetadataRetriever() +// var bitmap: Bitmap? = null +// try { +// if (path?.contains("http") == true){ +// retriever.setDataSource(path, HashMap()) +// }else{ +// retriever.setDataSource(path) +// } +// bitmap = retriever.frameAtTime +// }catch (ex: Exception){ +// ex.printStackTrace() +// }finally { +// try { +// retriever.release() +// }catch (e: RuntimeException){ +// e.printStackTrace() +// } +// } +// +// if (bitmap != null) { +// UiThreadHandler.post { // setCacheImageView(bitmap) - } - } - } - } +// } +// } +// } +// } } \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m2/res/layout/p_m2_video_fragment.xml b/OCH/mogo-och-bus-passenger/src/m2/res/layout/p_m2_video_fragment.xml index 72a3a97a20..e21fb3554b 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/res/layout/p_m2_video_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/m2/res/layout/p_m2_video_fragment.xml @@ -7,7 +7,7 @@