nit)? = null
fun init() {
lastFindPosition = -1
initRecycleView()
startAttach(1500)
}
private fun initRecycleView() {
target?.registerOnPageChangeCallback(onPagerChangeListener)
}
private fun inflateRootVideoPlayer(): View {
val rootView = LayoutInflater.from(context)
.inflate(R.layout.video_widget_group_album_player, null, false)
val video = rootView.findViewById<VideoPlayerView>(R.id.video_player_view)
val tvTime = rootView.findViewById<TextView>(R.id.tv_time)
val ivAudio = rootView.findViewById<View>(R.id.iv_audio)
ivAudio.setOnThrottledClickListener {
isSoundOff = !isSoundOff
//静音播放
if (isSoundOff) {
video.setSoundOff()
} else {
video.setSoundOpen()
}
}
if (isSoundOff) {
video.setSoundOff()
}
inflateVerticalVideoPlayer(video, tvTime)
return rootView
}
private fun inflateVerticalVideoPlayer(
video: VideoPlayerView,
tvTime: TextView
) {
videoPlayerView = video
video.setCoverViewScaleType(ImageView.ScaleType.FIT_CENTER)
.setScreenRatio(PLVideoTextureView.ASPECT_RATIO_FIT_PARENT)
.setOnVideoCompletionListener {
removeVideoParent(rootView)
}
video.setOnCurrentProgressChange(object :
VideoPlayerView.OnCurrentProgressChange {
override fun onCurrentProgressChange(
currentProgress: Int,
currentTime: String?
) {
val totalVideoDurationTimeMill = (video.currentPosition) * 1000L//得到秒
val countDownTime =
(totalVideoDurationTimeMill - totalVideoDurationTimeMill * (currentProgress / 100f)).toInt()
val countDownTimeStr = TimeUtils.getVideoFormatTime(countDownTime / 1000)
if (tvTime.text.toString() == countDownTimeStr) return
if (currentProgress in 1..99) {
tvTime.text = countDownTimeStr
}
}
override fun onCurrentPlayPosition(
currentPosition: Int,
totalDuration: Int
) {
}
})
video.tag = VIDEO_PLAYER_TAG
}
/**
* 1、计算当前显示的条目是否包含视频类型
* 2、判断当前的条目是否和为上一个播放的条目,是的话返回
*/
private fun findViewAndHandleVideoPlayer() {
isLastItemStillVisible()
if (currentPosition == -1) return
doAfterFindPosition(currentPosition)
}
private fun doAfterFindPosition(lastCompletelyItemPosition: Int) {
if (getVideoItemWithPosition(lastCompletelyItemPosition) == null) return
rootView?.let {
if (lastCompletelyItemPosition == lastFindPosition && rootView?.visibility == View.VISIBLE) {
// 同一个视频条目,且未滑出过界面
if (videoPlayerView?.isPlaying == false) {
addVideoPlayerView(lastCompletelyItemPosition)
}
return
}
// 滑出过界面的同一个条目,也要重新加载视频
removeVideoParent(rootView)
addVideoPlayerView(lastCompletelyItemPosition)
lastFindPosition = lastCompletelyItemPosition
}
}
private fun isLastItemStillVisible() {
val needRemove = isCurrentItemNeedRemove()
if (needRemove) {
// 上一条已经不在可视范围内
removeVideoParent(rootView)
}
}
private fun isCurrentItemNeedRemove(): Boolean {
if (lastFindPosition != currentPosition) {
return true
}
return false
}
private fun addVideoPlayerView(eddVisibleItem: Int) {
val nextItemView = getItemViewWithPosition(eddVisibleItem) ?: return
val videoData = getVideoItemWithPosition(eddVisibleItem) ?: return
rootView?.let { root ->
if (nextItemView.indexOfChild(root) == -1) {
root.invisible()
val params = root.layoutParams
params?.let {
if (params.width != nextItemView.width || params.height != nextItemView.height) {
params.width = nextI |