[宣传视频] refactor: 宣传视频播放重构 step1 ;

This commit is contained in:
aibingbing
2023-12-11 20:09:50 +08:00
parent bf605e6865
commit 606cab9fe0
9 changed files with 363 additions and 310 deletions

View File

@@ -1,10 +1,23 @@
package com.mogo.och.common.module.wigets.video
data class AdsDatas(val ads:MutableList<RotationItem>)
data class AdsDatas(val ads: MutableList<MediaItem>)
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
}
}

View File

@@ -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<RotationItem>) {
pagerAdapter?.setData(list)
}
fun setPause() {
pagerAdapter?.setPause()
}
fun setResume() {
pagerAdapter?.setResume()
}
}

View File

@@ -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<MediaItem>) {
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<MediaItem>()
private var mItemViewList = mutableListOf<View>()
private var mLastViewPagerPosition = -1
private var mImageCountDownTimer: CountDownTimer? = null
fun setMediaData(list: MutableList<MediaItem>) {
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
}
}
}
}

View File

@@ -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<VideoPlayerFragment?, VideoPlayerPresenter?>() {
private var arrayListOf = mutableListOf<RotationItem>()
companion object {
private val TAG = VideoPlayerFragment::class.java.simpleName
}
private var arrayListOf = mutableListOf<MediaItem>()
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() {

View File

@@ -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<RotationItem>()
private var viewList = mutableListOf<View>()
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<RotationItem>) {
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
}
}
}

View File

@@ -2,11 +2,9 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 图片或视频广告-->
<com.mogo.och.common.module.wigets.video.ImageVideoRotationView
<com.mogo.och.common.module.wigets.video.MediaLoopPlayView
android:id="@+id/imageVideoRotationView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -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<PM2VideoFragment?, PM2VideoPresenter?>() {
private var arrayListOf = mutableListOf<RotationItem>()
private var arrayListOf = mutableListOf<MediaItem>()
override fun getLayoutId(): Int {
return R.layout.p_m2_video_fragment

View File

@@ -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<RotationItem>()
private var dataList = mutableListOf<MediaItem>()
private var viewList = mutableListOf<View>()
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<RotationItem>) {
fun setData(list: MutableList<MediaItem>) {
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)

View File

@@ -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<RotationItem>){
fun setData(list: MutableList<MediaItem>){
pagerAdapter?.setData(list)
}