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();
БОНУС: Если вы хотите сделать более сложные настройки, такие как настройка соотношения сторон видео, вы можете проверить эту библиотеку для более подробной информации.