Центр Обрезать Android VideoView
Я ищу что-то вроде CENTER_CROP в ImageView.ScaleType
Равномерно масштабируйте изображение (поддерживайте пропорции изображения), чтобы обе размеры (ширина и высота) изображения были равны или больше соответствующего размера представления (минус заполнение). Изображение затем центрируется в представлении. Из XML используйте этот синтаксис: android: scaleType = "centerCrop"
но для VideoView. Есть ли что-нибудь подобное?
Ответы
Ответ 1
Вы можете добиться этого только с помощью TextureView. (surfaceView тоже не работает). Здесь lib для воспроизведения видео в текстуре с функцией центровки. TextureView можно использовать только в api level 14 и, к сожалению, к сожалению.
https://github.com/dmytrodanylyk/android-video-crop
Еще одна возможность - просто увеличить видеоизображение, но я еще не пробовал.
Ответ 2
//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;
}
Ответ 3
Существует способ без использования TextureView
.
Поместите свой VideoView
внутри ConstraintLayout
(эквивалент с FrameLayout
не работает):
<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>
Затем во время выполнения добавьте OnPreparedListener
который проверяет соотношение видео и отношение View и масштабирует ConstraintLayout
соответственно:
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
}
}
Ответ 4
Это решение для VideoView масштабирует Center Crop или Center Inside, сохраняя пропорции видео, как это делает ImageView. Надеюсь, это поможет кому-то! fooobar.com/info/129179/...