如何从Surface View(在活动中运行)切换到其他活动

时间:2016-12-09 14:18:20

标签: android android-videoview android-windowmanager

在其中一个场景中,我实现了Surface View,它是Activity的一部分。现在我需要隐藏此视频视图,以便在其他应用程序屏幕中漫游。

AFAIK,我们不能最小化/隐藏活动,可能是处理这种情况的其他方法。

我遇到了环聊& WhatsApp视频通话场景,他们隐藏视频视图,同时回到其他活动&需要时恢复。

我也遇到过Youtube移动应用程序,但他们可能会在单个活动中管理所有内容。还找到了一些可用的解决方案here。 &安培; here。我仍然需要尝试。

他们是怎么做的。任何建议!

1 个答案:

答案 0 :(得分:2)

简单回答:不要在活动之间保持观点。您可以保存并传递状态/变量,但将其保存在内存中并不明智。所以:

  1. 切换到片段结构并创建一个片段,其中包含附加到视图的SurfaceView,并在不需要时将其移动到背景

  2. 或者保留surfaceview的实例(或状态)并将其从附加的视图中分离出来并在需要时重新附加

  3. 我认为这是唯一合法的方法。我曾经这样做只是使用Singleton作为surfaceview并在需要时从视图中附加/分离它,但这不是最干净的方式。

    评论伪代码交易

    您应该具有以下内容:活动,FragmentA,FragmentB和VideoFragment。活动布局仅包含两个视图,一个是全屏(对于FragmentA和B),另一个是视频视图。要创建片段,请右键单击New-> Fragment-> Blank。首先,您必须在视图中初始化片段才能执行此操作,并最终使用FragmentB替换FragmentA,您可以使用以下代码:

    Fragment fragmentB = new FragmentB();
    
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.replace(R.id.viewHolder, fragmentB);
    transaction.commit();
    

    您的活动布局应如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context="nl.coffeeit.clearvoxnexxt.activities.TestActivity">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            <FrameLayout
                android:id="@+id/viewHolderFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#F00"/>
    
            <FrameLayout
                android:id="@+id/videoHolder"
                android:layout_width="300dp"
                android:layout_height="200dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_margin="16dp"
                android:alpha="0.5"
                android:background="#00F"/>
        </RelativeLayout>
    
    
    </android.support.design.widget.CoordinatorLayout>