重新组合活动布局,以在旋转屏幕时全屏播放视频

时间:2011-03-08 08:33:09

标签: android video layout rotation fullscreen

在一项活动中,我嵌入了一个视频窗口小部件(与SurfaceView关联的VideoView或MediaPlayer),当旋转屏幕时,应调整其大小。此活动用作TabHost中的内容。

我目前的做法

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

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

我想做什么

我需要能够在旋转屏幕时翻译/缩放/隐藏活动内的视图。翻译/缩放需要维护布局组织,以便使布局适应不同的屏幕尺寸。

Desired animation/layout

我的问题

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

  • 我需要实现哪个接口回调才能获得屏幕旋转通知以解除这些转换?

1 个答案:

答案 0 :(得分:9)

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

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

就我而言,我的活动清单如下:

<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);
    }

我的活动的布局如下:

<?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的内容会被调整大小,当在横向时,我有全屏观看电影。

我希望它会帮助你们中的一些人。