在其中一个场景中,我实现了Surface View,它是Activity的一部分。现在我需要隐藏此视频视图,以便在其他应用程序屏幕中漫游。
AFAIK,我们不能最小化/隐藏活动,可能是处理这种情况的其他方法。
我遇到了环聊& WhatsApp视频通话场景,他们隐藏视频视图,同时回到其他活动&需要时恢复。
我也遇到过Youtube移动应用程序,但他们可能会在单个活动中管理所有内容。还找到了一些可用的解决方案here。 &安培; here。我仍然需要尝试。
他们是怎么做的。任何建议!
答案 0 :(得分:2)
简单回答:不要在活动之间保持观点。您可以保存并传递状态/变量,但将其保存在内存中并不明智。所以:
切换到片段结构并创建一个片段,其中包含附加到视图的SurfaceView,并在不需要时将其移动到背景
或者保留surfaceview的实例(或状态)并将其从附加的视图中分离出来并在需要时重新附加
我认为这是唯一合法的方法。我曾经这样做只是使用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>