24.02.11 뷰페이저로 쇼츠 구현시 다음 영상이 미리 재생되는 문제

KSang·2024년 2월 12일
0

TIL

목록 보기
57/101

뷰페이저로 쇼츠 화면을 만들었는데 현재 보고 있는 뷰페이저의 홀더가 아니라

다른 곳에서 영상이 재생되는 현상이 발생했다.

뷰페이저의 특징 때문에 발생한 건데,

뷰페이저는 미리보기로 화면에 보이지 않더라도 주위에 홀더를 1개씩 미리 만들어둔다

그렇기 때문에

            vvShortsVideo.addYouTubePlayerListener(
                object : AbstractYouTubePlayerListener() {
                    override fun onReady(youTubePlayer: YouTubePlayer) {
                        item.id?.let { youTubePlayer.loadVideo(it, 0f) }
                    }

                    override fun onStateChange(
                        youTubePlayer: YouTubePlayer,
                        state: PlayerConstants.PlayerState
                    ) {
                        if (state == PlayerConstants.PlayerState.ENDED) {
                            youTubePlayer.seekTo(0f)
                            youTubePlayer.play()
                        }
                    }
                })

지난번에 설정한 loadVideo때문에 미리보기 홀더에서 뷰가 그려진후 바로 재생되니

현재 보고 있던 페이지의 영상이 멈추고 다음 페이지의 영상이 재생되고 있던 것 이었다.

일단 영상이 재생되지 않게 cueVideo로 바꿔주고 현재 보고있는 홀더가 어딘지를 구별해줘야 할 것이다

    override fun onViewAttachedToWindow(holder: ShortsViewHolder) {
        super.onViewAttachedToWindow(holder)
        if (holder is ShortsItemViewHolder) {
            currentViewHolder = holder
        }
    }

현재 홀더 정해주고

    private val adapter: ShortsAdapter by lazy {
        ShortsAdapter(
            onBookmarkChecked = { item ->
                item
            },
            onSharedChecked = { item ->
                item
            },
            onCommentChecked = this::onCommentChecked,
            playerReady = { if (it) adapter.currentViewHolder?.playVideo() }
        )
    }

람다로 리스너를 만들어

유튜브 플레이어를 시작하게 만든다.

0개의 댓글