Android Landscape VideoView в портретном режиме

У меня есть действие, которое должно отображать VideoView в альбомной ориентации, но само действие не должно быть в альбомной ориентации, так что это то, что у меня есть.

    <activity
        android:name=".gui.VideoPlayer"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" >
    </activity>

<?xml version="1.0" encoding="utf-8"?>

Деятельность

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <VideoView
        android:id="@+id/myvideoview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" />

</LinearLayout>

(Само действие должно оставаться в портретном режиме, потому что устройство будет помещено в чехол, который охватывает навигацию и строки состояния, но в альбомном режиме он больше не будет их закрывать)

1 ответ

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

Попробуйте использовать TextureView вместо VideoView, потому что, когда вы поворачиваете его, содержимое внутри также вращается.

 <TextureView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/my_texture_view"
    android:rotation="90"
    android:scaleX="1.8"
    />

Затем вам нужно будет создать SurfaceTextureListener и настроить его на свой вид, как показано ниже:

 TextureView.SurfaceTextureListener mTextureListener = new TextureView.SurfaceTextureListener() {
    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {

        Surface s = new Surface(surfaceTexture);
        try {
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(currentPageVideoUrl);
        mMediaPlayer.setSurface(s);
        mMediaPlayer.prepare();
        }catch (Exception e){e.printStackTrace();}
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        return false;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {

    }
};

А теперь просто установите слушателя на ваш TextureView:

 mTextureView.setSurfaceTextureListener(mTextureListener);

Все, что осталось сделать, это позвонить, чтобы начать видео:

mMediaPlayer.start();

БОНУС: Если вы хотите сделать более сложные настройки, такие как настройка соотношения сторон видео, вы можете проверить эту библиотеку для более подробной информации.

Другие вопросы по тегам