Растянуть видео на весь экран в расширении SurfaceView - PullRequest
5 голосов
/ 11 июня 2010

Я создал виджет, который является расширением SurfaceView (очень похоже на VideoView ), и я работаю над функцией полного растягивания видео на экране устройства при выполнении определенных действий. Я посмотрел на onMeasure функцию VideoView и переписал это так:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (mStretchVideo) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
        int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
        int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
        if (mVideoWidth > 0 && mVideoHeight > 0) {
            if (mVideoWidth * height > width * mVideoHeight) {
                height = width * mVideoHeight / mVideoWidth;
            } else if (mVideoWidth * height < width * mVideoHeight) {
                width = height * mVideoWidth / mVideoHeight;
            }
        }
        setMeasuredDimension(width, height);
    }
}

Кажется, это работает нормально, если я полностью остановлю видео и начну воспроизведение снова. Теперь я пытаюсь принудительно обновить SurfaceView после установки флага растяжки, чтобы видео растягивалось во время воспроизведения, но я не мог понять, как принудительно обновить SurfaceView. Я пытался android.view.View.invalidate(), android.view.View.refreshDrawableState() и вызывал android.view.View.measure(int, int) напрямую с разными комбинациями, но не добился успеха. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Не требуется код для воспроизведения видео в полноэкранном режиме

Примените следующий формат макета над xml, содержащим видеовид, он наверняка воспроизведет видео в полноэкранном режиме. как это работает мой :) Надеюсь, что это помогает

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" >
   <VideoView android:id="@+id/myvideoview"
             android:layout_width="fill_parent"
             android:layout_alignParentRight="true"
             android:layout_alignParentLeft="true"
             android:layout_alignParentTop="true"
             android:layout_alignParentBottom="true"
             android:layout_height="fill_parent">
    </VideoView>
 </RelativeLayout>
1 голос
/ 09 сентября 2011

Вы можете вызвать measure метод SurfaceView из действия следующим образом:

        Display display = getWindowManager().getDefaultDisplay(); 
    int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(display.getWidth(),
            MeasureSpec.UNSPECIFIED);
    int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(display.getHeight(),
            MeasureSpec.UNSPECIFIED);
    surfaceView.measure(childWidthMeasureSpec, childHeightMeasureSpec);
0 голосов
/ 28 апреля 2015

Javanator - правильный ответ.Нет необходимости в дополнительном коде.Убедитесь, что ваше видео выглядит так

1002 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...