【问题标题】:Recompose Activity layout to play video in fullscreen when screen is rotated重新组合 Activity 布局以在屏幕旋转时全屏播放视频
【发布时间】:2011-07-10 22:44:01
【问题描述】:

在一个 Activity 中,我嵌入了一个 Video 小部件(与 SurfaceView 相关联的 VideoView 或 MediaPlayer),当屏幕旋转时应该调整其大小。此 Activity 用作 TabHost 中的内容。

我目前的方法

为了处理屏幕旋转,我提供了两种布局,一种用于纵向,另一种用于横向(放置在 ./res/layout 和 ./res/layout-land 文件夹中)。

这种方法的问题是每次旋转都会创建一个新的 Activity,因此我不使用相同的 MediaPlayer(或 VideoView)=> 每次旋转屏幕时我都会从头开始播放视频。由于视频是从网络流式传输的,因此无法在视频中存储位置,以便在其他 Activity 中重新启动视频时寻找到该位置。

我想做的事

当屏幕旋转时,我需要能够在 Activity 中翻译/缩放/隐藏视图。平移/缩放需要保持布局组织,以使布局适应不同的屏幕尺寸。

我的问题

  • 如何将视图平移/移动到屏幕的左上角?
  • 如何隐藏/翻译屏幕外的视图以使视图消失?
  • 如何缩放/调整视图以调整其大小以适应其周围的可用空间?

  • 我需要实现哪个接口、回调才能收到屏幕旋转通知以触发这些转换?

【问题讨论】:

  • +1 非常好的问题框架......

标签: android video layout rotation fullscreen


【解决方案1】:

我终于找到了做这件事的好方法。 在 Android 文档中,指定当您需要处理修改(方向、键盘...)而不重新创建新 Activity 时,您应该通过覆盖 Activity 类的 onConfigurationChanged 方法来完成。您必须在 Activity 的清单文件中指定您认为合理的修改。

您可以找到有关此here 的更多信息。

就我而言,我的 Activity 清单如下所示:

<activity android:name=".MyActivity" android:configChanges="orientation"></activity> 

在我的 MyActivity Activity 中,我添加了以下方法:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int visibility = View.VISIBLE;
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            visibility = View.GONE;
        }
        getTabHost().getTabWidget().setVisibility(visibility);
    }

我的 Activity 具有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

      <TabWidget
          android:id="@android:id/tabs"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content" />

      <FrameLayout
          android:id="@android:id/tabcontent"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" />

    </LinearLayout>

</TabHost>

这样,当我隐藏/显示 tabWidget 栏时,VideoView(添加到 TabHost 的内容中会调整大小,而在横向时,我可以全屏观看电影。

希望对大家有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2020-11-21
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多