studio para herramientas desarrollo curso biblia avanzado aplicaciones android scale center crop videoview

para - Centro de recorte de un Android VideoView



manual android studio avanzado (3)

Estoy buscando algo como el CENTER_CROP en ImageView.ScaleType

Escale la imagen uniformemente (mantenga la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o más grandes que la dimensión correspondiente de la vista (menos el relleno). La imagen se centra entonces en la vista. Desde XML, use esta sintaxis: android: scaleType = "centerCrop"

pero para un VideoView. ¿Existe algo como esto?


Hay una manera sin utilizar TextureView .

Coloque su VideoView dentro de un ConstraintLayout (el equivalente con FrameLayout no funcionó):

<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/container" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <VideoView android:id="@+id/videoView" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>

Luego, en el tiempo de ejecución, agregue un OnPreparedListener que verifique la proporción de video en comparación con la proporción de la vista, y aumente la ConstraintLayout consecuencia:

videoView.setOnPreparedListener { mediaPlayer -> val videoRatio = mediaPlayer.videoWidth / mediaPlayer.videoHeight.toFloat() val screenRatio = container.width / container.height.toFloat() val scaleX = videoRatio / screenRatio if (scaleX >= 1f) { container.scaleX = scaleX } else { container.scaleY = 1f / scaleX } }


Solo puedes lograr esto con un TextureView. (SurfaceView no funcionará tampoco). Aquí hay una biblioteca para reproducir video en un textureView con función de recorte central. TextureView solo se puede usar en api nivel 14 y superior desafortunadamente.

https://github.com/dmytrodanylyk/android-video-crop

Otra posibilidad es hacer zoom en la vista de video, pero no lo he intentado todavía.


//store the SurfaceTexture to set surface for MediaPlayer mTextureView.setSurfaceTextureListener(new SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { FullScreenActivity.this.mSurface = surface; }