TextureView en Android se usa para mostrar flujos de contenido que pueden ser una instancia de un video o una escena OpenGL. La fuente podría ser tanto local como en Internet. Esta vista se comporta como una vista normal sin crear una ventana separada y solo se puede usar en una ventana acelerada por hardware. Entonces, en este artículo, le mostraremos cómo puede reproducir un video guardado localmente en un TextureView en Android. Siga los pasos a continuación una vez que el IDE esté listo.
Implementación paso a paso
Paso 1: crea un nuevo proyecto en Android Studio
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.
Paso 2: agregue un video en la carpeta de activos
Cree una carpeta de activos y copie y pegue cualquier video de muestra de su elección. Para saber cómo crear una carpeta de activos, siga este artículo: Carpeta de activos en Android Studio
Paso 3: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml . Agregue un TextureView como se muestra a continuación.
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextureView android:id="@+id/texture_view_1" android:layout_width="300sp" android:layout_height="200sp" android:layout_centerInParent="true"/> </RelativeLayout>
Paso 4: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package org.geeksforgeeks.textureviewexample import android.content.res.AssetFileDescriptor import android.graphics.SurfaceTexture import android.media.MediaPlayer import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.Surface import android.view.TextureView class MainActivity : AppCompatActivity(), TextureView.SurfaceTextureListener { // Declaring mediaPlayer and // asset file descriptor private var mediaPlayer: MediaPlayer? = null private lateinit var assetFileDescriptor: AssetFileDescriptor override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Declaring and initializing // TextureView from layout val mTextureView = findViewById<TextureView>(R.id.texture_view_1) mTextureView.surfaceTextureListener = this@MainActivity } // When app is destroyed, // media player stops override fun onDestroy() { super.onDestroy() if (mediaPlayer != null) { mediaPlayer?.stop() mediaPlayer?.release() mediaPlayer = null } } // Locate the video file and // add to the media player override fun onSurfaceTextureAvailable(surfaceTexture: SurfaceTexture, width: Int, height: Int) { try { assetFileDescriptor = assets.openFd("sample_video.mp4") } catch (e: Exception) { e.printStackTrace() } try { val surface = Surface(surfaceTexture) mediaPlayer = MediaPlayer() mediaPlayer?.setDataSource( assetFileDescriptor.fileDescriptor, assetFileDescriptor.startOffset, assetFileDescriptor.length ) mediaPlayer?.prepareAsync() mediaPlayer?.setSurface(surface) mediaPlayer?.isLooping = true mediaPlayer?.setOnPreparedListener { player -> player?.start() } mediaPlayer?.setOnErrorListener { _, _, _ -> false } } catch (e: Exception) { e.printStackTrace() } } override fun onSurfaceTextureSizeChanged(p0: SurfaceTexture, p1: Int, p2: Int) {} override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean { return false } override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {} }
Producción:
Puede ver que TextureView muestra el video.
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA