要在Android Kotlin中使用ExoPlayer与SurfaceView进行视频播放,并在NestedScrollView中嵌套SurfaceView,可以按照以下步骤操作:

  1. 首先,在你的xml布局文件中添加NestedScrollView和SurfaceView,如下所示:
<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</androidx.core.widget.NestedScrollView>
  1. 在你的Activity或Fragment中,初始化ExoPlayer和SurfaceView,并设置ExoPlayer的渲染器为SurfaceView的Holder。同时,你还需要在Activity的onPause()和onResume()方法中分别暂停和恢复ExoPlayer的播放。
private var exoPlayer: SimpleExoPlayer? = null
private lateinit var surfaceView: SurfaceView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    surfaceView = findViewById(R.id.surfaceView)
    surfaceView.holder.addCallback(object : SurfaceHolder.Callback {
        override fun surfaceCreated(holder: SurfaceHolder) {
            val renderersFactory = DefaultRenderersFactory(this@MainActivity)
            val trackSelector = DefaultTrackSelector(this@MainActivity)
            exoPlayer = ExoPlayerFactory.newSimpleInstance(this@MainActivity, renderersFactory, trackSelector)

            exoPlayer?.playWhenReady = true
            exoPlayer?.setVideoSurfaceHolder(holder)
        }

        override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
        }

        override fun surfaceDestroyed(holder: SurfaceHolder) {
            exoPlayer?.release()
            exoPlayer = null
        }
    })
}

override fun onPause() {
    super.onPause()
    exoPlayer?.playWhenReady = false
    exoPlayer?.playbackState
}

override fun onResume() {
    super.onResume()
    exoPlayer?.playWhenReady = true
    exoPlayer?.playbackState
}
  1. 若要实现横竖屏切换效果,你可以在AndroidManifest.xml文件中为该Activity添加以下属性:
<activity
    android:name=".MainActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
    android:resizeableActivity="true"
    android:screenOrientation="fullSensor" />

这将使得Activity在横竖屏切换时不会重新创建,并且可以根据设备的方向自动调整屏幕的方向。

以上就是在Android Kotlin中使用ExoPlayer与SurfaceView进行视频播放,并在NestedScrollView中嵌套SurfaceView的步骤。希望对你有所帮助

Android kotlin使用ExoPlayer+SurfaceView NestedScrollView嵌套SurfaceView SurfaceView在中间 播放视频 横竖屏切换效果

原文地址: https://www.cveoy.top/t/topic/iIaB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录