Пропорциональное масштабирование Android VideoView

В Android VideoView есть ли способ достичь такого же эффекта, как ImageView.ScaleType.CENTER_CROP?

То есть, я хочу, чтобы мой VideoView воспроизводил видео таким образом, что он заполняет весь экран без искажений. Если соотношение сторон видео не точно соответствует экрану, то оно должно быть обрезано, а не искажено.

Следующее решение заполнит экран, но не поддерживает соотношение сторон видео: qaru.site/info/329973/...

И это решение поддерживает соотношение сторон видео, но не заполняет весь экран (видео масштабируется до тех пор, пока более длинная сторона не ударит по краю экрана, тем самым не включив бары сбоку): qaru.site/info/129179/...

Ответы

Ответ 1

Хотя уже слишком поздно, но это может помочь кому-то еще искать ту же проблему. Следующий ответ поддерживает соотношение сторон (videoProportion). Дополнительная часть видеоизображение обрезается по представлению "Телефон".

private void setDimension() {
     // Adjust the size of the video
     // so it fits on the screen
     float videoProportion = getVideoProportion();
     int screenWidth = getResources().getDisplayMetrics().widthPixels;
     int screenHeight = getResources().getDisplayMetrics().heightPixels;
     float screenProportion = (float) screenHeight / (float) screenWidth;
     android.view.ViewGroup.LayoutParams lp = videoView.getLayoutParams();

     if (videoProportion < screenProportion) {
         lp.height= screenHeight;
         lp.width = (int) ((float) screenHeight / videoProportion);
     } else {
         lp.width = screenWidth;
         lp.height = (int) ((float) screenWidth * videoProportion);
     }
     videoView.setLayoutParams(lp);
 }

// This method gets the proportion of the video that you want to display.
// I already know this ratio since my video is hardcoded, you can get the  
// height and width of your video and appropriately generate  the proportion  
//    as :height/width 
private float getVideoProportion(){
  return 1.5f;
}

Ответ 2

Это решение для VideoView масштабирует Center Crop или Center Inside, сохраняя пропорции видео, как это делает ImageView. Надеюсь, это поможет кому-то! fooobar.com/questions/129179/...

Ответ 3

Существует способ без использования TextureView. См. Мой ответ здесь: fooobar.com/info/329967/...