Android kotlin使用ExoPlayer+SurfaceView 播放视频 全屏时SurfaceView全屏播放 其它ui消失 详细代码
以下是一个使用ExoPlayer和SurfaceView播放视频,并在全屏时隐藏其他UI的Kotlin代码示例:
-
首先,确保你的项目中已经添加了ExoPlayer库的依赖。
-
创建一个布局文件,命名为activity_main.xml,并添加一个SurfaceView和其他UI元素,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 添加其他UI元素 -->
</RelativeLayout>
- 在MainActivity.kt中,使用ExoPlayer和SurfaceView来播放视频,并在全屏时隐藏其他UI元素。以下是完整的代码:
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.appcompat.app.AppCompatActivity
import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.DefaultRenderersFactory
import com.google.android.exoplayer2.ExoPlayerFactory
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.ExtractorMediaSource
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
import com.google.android.exoplayer2.ui.PlayerView
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import com.google.android.exoplayer2.util.Util
class MainActivity : AppCompatActivity() {
private lateinit var player: SimpleExoPlayer
private lateinit var playerView: PlayerView
private lateinit var surfaceView: SurfaceView
private lateinit var originalLayoutParams: ViewGroup.LayoutParams
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
playerView = PlayerView(this)
playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL
surfaceView = findViewById(R.id.surfaceView)
originalLayoutParams = surfaceView.layoutParams
initializePlayer()
preparePlayer()
surfaceView.setOnClickListener {
toggleFullScreen()
}
}
private fun initializePlayer() {
val renderersFactory = DefaultRenderersFactory(this)
val trackSelector = DefaultTrackSelector()
val loadControl = DefaultLoadControl()
player = ExoPlayerFactory.newSimpleInstance(
this,
renderersFactory,
trackSelector,
loadControl
)
playerView.player = player
}
private fun preparePlayer() {
val userAgent = Util.getUserAgent(this, "ExoPlayerDemo")
val mediaSource = ExtractorMediaSource.Factory(
DefaultDataSourceFactory(this, userAgent)
).createMediaSource(Uri.parse("your_video_url_here"))
player.prepare(mediaSource)
player.playWhenReady = true
}
private fun toggleFullScreen() {
if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
hideSystemUi()
setLayoutToFullScreen()
} else {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
showSystemUi()
restoreOriginalLayout()
}
}
private fun hideSystemUi() {
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
)
}
private fun showSystemUi() {
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)
}
private fun setLayoutToFullScreen() {
val params = surfaceView.layoutParams as FrameLayout.LayoutParams
params.width = ViewGroup.LayoutParams.MATCH_PARENT
params.height = ViewGroup.LayoutParams.MATCH_PARENT
surfaceView.layoutParams = params
}
private fun restoreOriginalLayout() {
surfaceView.layoutParams = originalLayoutParams
}
override fun onDestroy() {
super.onDestroy()
player.release()
}
}
请记得将"your_video_url_here"替换为你自己的视频URL。
这段代码创建了一个SimpleExoPlayer对象,使用ExtractorMediaSource从URL中加载视频源,并将其显示在SurfaceView上。当用户点击SurfaceView时,会切换到全屏模式,隐藏其他UI元素,并将SurfaceView的布局参数设置为全屏。当用户退出全屏模式时,会恢复原始的布局参数并显示其他UI元素。
希望这能帮助到你
原文地址: https://www.cveoy.top/t/topic/iHGe 著作权归作者所有。请勿转载和采集!