Android Recyclerview, чтобы показать видео ползункаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Recyclerview, чтобы показать видео ползунка

Сообщение Anonymous »

Я хочу показать видео в просмотре Recycler, проблема в том, что когда я обменяюсь с первого видео и обратно на первое, первое перезагрузка видео снова, я хочу сделать все видео загружены одновременно, и когда я обменяюсь, сохраняет видео загруженное. эти строки в фрагменте => < /p>

Код: Выделить всё

// Setup StoryBoardAdapter
val storyboardAdapter = StoryBoardAdapter(requireContext(), DataRepository.storyBoardList)
val layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
binding.recyclerViewStoryBoard.layoutManager = layoutManager
binding.recyclerViewStoryBoard.adapter = storyboardAdapter

// Attach PagerSnapHelper to show one item at a time
val pagerSnapHelper = PagerSnapHelper()
pagerSnapHelper.attachToRecyclerView(binding.recyclerViewStoryBoard)
< /code>
И это адаптер => < /p>
class StoryBoardAdapter(
private val context: Context,
private val storyBoardList: List
< /code>
): recyclerview.adapter  () {< /p>
companion object {
private const val TYPE_IMAGE = 0
private const val TYPE_VIDEO = 1
private const val BASE_URL = "Link"
}

private fun isVideo(url: String): Boolean {
val lowerUrl = url.lowercase()
return lowerUrl.endsWith(".mp4") || lowerUrl.endsWith(".webm")
}

private fun getFullUrl(relativeUrl: String): String {
return if (relativeUrl.startsWith("http")) relativeUrl else "$BASE_URL$relativeUrl"
}

override fun getItemViewType(position: Int): Int {
return if (isVideo(storyBoardList[position].imageEn)) TYPE_VIDEO else TYPE_IMAGE
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == TYPE_IMAGE) {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_story_board_image, parent, false)
ImageViewHolder(view)
} else {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_story_board_video, parent, false)
VideoViewHolder(view)
}
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = storyBoardList[position]

// Check system or app language (you can replace with a stored preference if needed)
val currentLanguage = context.resources.configuration.locales[0].language
val imageUrl = if (currentLanguage == "ar") item.imageAr else item.imageEn
val fullUrl = getFullUrl(imageUrl)

if (holder is ImageViewHolder) {
Glide.with(holder.imageView.context)
.load(fullUrl)
.into(holder.imageView)
} else if (holder is VideoViewHolder) {
val videoUri = Uri.parse(fullUrl)

if (holder.videoView.tag != fullUrl) {
holder.videoView.tag = fullUrl
holder.videoView.setVideoURI(videoUri)
holder.videoView.setOnPreparedListener { mediaPlayer ->
mediaPlayer.isLooping = true
holder.videoView.start()
}
}
}
}

override fun getItemCount(): Int = storyBoardList.size

inner class ImageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ImageView = itemView.findViewById(R.id.imageViewItem)
}

inner class VideoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val videoView: VideoView = itemView.findViewById(R.id.videoViewItem)
}
}

Подробнее здесь: https://stackoverflow.com/questions/795 ... deo-slider
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»