当屏幕旋转时,重新设计活动布局以在全屏播放视频

8
在一个Activity中,我嵌入了一个视频小部件(VideoView或与SurfaceView相关的MediaPlayer),当屏幕旋转时应该适应其大小。这个Activity用作TabHost的内容。 我的当前方法 为了处理屏幕旋转,我提供了两个布局,一个是竖屏模式下的布局,另一个是横屏模式下的布局(放置在./res/layout和./res/layout-land文件夹中)。
这种方法的问题在于每次旋转屏幕都会创建一个新的Activity,因此我不使用同一个MediaPlayer(或VideoView) => 我每次旋转屏幕都会从头开始播放视频。由于视频是从网络上流式传输的,所以没有办法存储视频中的位置,以便重新启动视频时可以查找到该位置。 我想做什么 当屏幕旋转时,我需要能够翻译/缩放/隐藏Activity中的视图。平移/缩放需要保持布局组织,以便有一个适应不同屏幕大小的布局。

Desired animation/layout

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

  • 我需要实现哪个接口、回调函数才能被通知屏幕旋转来触发这些变换?


1
+1 对问题的非常好的框架化,点赞。 - N-JOY
1个回答

9

我终于找到了一个好方法来处理它。

在 Android 文档中,指定当您需要处理修改 (方向、键盘...) 而不创建新的 Activity 时,您应该通过覆盖 Activity 类的 onConfigurationChanged 方法来实现。您必须在您的 Activity 的清单文件中指定您所敏感的修改。

您可以在这里找到更多关于此的信息:这里

在我的情况下,我的 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工具栏时,添加到TabHost内容中的VideoView会被调整大小,当处于横屏状态时,我可以全屏观看电影。

希望对你们有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接