我目前正在开发Android应用程序。基本上,我有多个ViewFlipper,它们将用于创建“面板”集。例如,我有一个ViewFlipper来模拟主屏幕环境(可以通过向左或向右滑动访问多个面板),以及一个不同的ViewFlipper来模拟应用程序启动器(喜欢的应用程序的面板,所有应用程序,设置等) 。我通过创建每组面板或每个ViewFlipper自己的活动来完成这项工作,以便在未使用一组面板时保留内存。
基本上,我希望在所有活动中保留相同的背景图像。现在,我知道这可以通过创建样式并将其应用于清单中的标签来完成,但我的问题是背景图像包含在活动过渡动画中(我自己的自定义动画已设置,但无论如何,如果使用股票过渡动画,则包含背景图像。
所以,我要问的是,有没有办法在多个活动之间保留一个共同的背景图像,而这些活动在活动之间切换时不是动画的?
目前,我的样式xml文件如下所示:
<style name="Theme" parent="android:Theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/background_port</item>
</style>
正如您所看到的,相同的drawable被设置为所有活动的背景,但它包含在活动之间的过渡动画中,这是我不想要的。我也试过android:detachWallpaper =“true”,但在这种情况下似乎没用。
我在Android代码方面经验丰富,所以无需用简单的方式解释。如果我不明白,我会问。
感谢您的帮助,非常感谢。
答案 0 :(得分:2)
我认为没有一个简单的解决方案可以解决这个问题,但我过去做过的事情是为了得到类似的事情。我通过在startActivity之后调用overridePendingTransition(0,0)之类的东西来删除活动转换。
然后,当活动即将发生变化时,我会在屏幕上手动为视图元素设置动画,然后在新活动中为屏幕上的新视图元素设置动画。
另外,在旁注中,如果您正在使用一个简单易用的面板类型视图组件,请查看SwipeView https://github.com/fry15/uk.co.jasonfry.android.tools
答案 1 :(得分:2)
不要使用活动。你只是试图将一个Activity变成像这样集成的行为,从而使你想做的事情变得非常复杂。使用视图。你说你想使用活动来节省内存,但它们不会节省你的记忆,并且比简单的视图更重要。通过视图,您可以在UI中完成控制,这基本上就是您所要求的。如果您希望尽可能高效地展示您希望在显示它们时显示的视图,并删除不再显示的视图层次结构的旧部分,以便可以进行GC。
答案 2 :(得分:1)
老问题,但万一有人遇到这个问题。
虽然我同意hackbod的回答,但对于简单的用例,有一种方法可以在API 21中实现。
活动1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_root"
android:transitionName="activity_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_bg"
android:backgroundTint="#4d000000"
android:backgroundTintMode="src_over"
>
<!-- Activity 1 stuff -->
</RelativeLayout>
活动2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_root"
android:transitionName="activity_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_bg"
android:backgroundTint="#4d000000"
android:backgroundTintMode="src_over"
>
<!-- Activity 2 stuff -->
</RelativeLayout>
然后你可以开始你的第二个活动:
Intent startIntent = new Intent(Activity1.this, Activity2.class);
Bundle b = ActivityOptionsCompat
.makeSceneTransitionAnimation(Activity1.this,
new Pair<>(findViewById(R.id.logo), "logo"), //Or whatever other elements you don't want moving around
new Pair<>(findViewById(R.id.activity_root), "activity_root"))
.toBundle();
startActivity(startIntent, b);