我希望能够创建类似于Swing GlassPane 的功能,以便在用户正常使用应用程序的同时显示动画。我不能简单地创建一个单独的布局并将其附加到每个活动上,因为在切换活动时动画状态会丢失。
是否有一种方法可以在 Android 应用程序的所有活动上保持持久视图?
谢谢。
不是这样的。每个 Activity 都在自己的线程中运行,并且按设计应该可以独立运行。
但你可以将动画状态持久化到数据库或 shared preferences 中,在新的 Activity 中重新启动它。
另外,你也可以使用 Spinner 或其他控件来代替独立的 Activity。这样就可以有一个持久性的视图了。
为什么不考虑使用TabActivity呢?
嗨!我以前用过TabActivity,但从未使用过单个活动,总是使用许多活动启动它们的窗口并将其设置为我的TabActivity窗口的装饰视图...我没有测试下面的代码,因为这只是一个想法,但也许更晚些时候(当我回家时)我会写一个例子...
所以,我的想法是... TabActivity由TabWidget和FrameLayout组成,其中包含了活动的窗口。
TabWidget可以是任何视图,因此您可以在此处放置动画视图。
最困难的问题是,如果您从TabActivity的子级启动活动,则新活动将位于TabActivity的顶部。为了覆盖此行为,TabActivity必须知道嵌套活动何时想要启动另一个活动。当发生这种情况时,TabActivity必须清除其装饰视图(旧窗口活动)并放置新窗口的装饰视图。就像这样:
在子活动中,当我们单击按钮时启动新活动: ...单击监听器...
((MyTabActivity)getParent()).createNewActivity("NewActivity", NewActivity.class);
现在,我们要让TabActivity启动一个新的活动,获取新活动的装饰视图,并将该视图放置在TabActivity的装饰视图中...因此,createNewActivity将执行类似于以下内容的操作:
public void createNewActivity(String activityId, Class<?> class1) {
Intent intent = new Intent( getIntent().getAction() ).setClass(MyTabActivity.this, class1);
Window wList = getLocalActivityManager().startActivity(activityId, intent);
getWindow().setContentView(wList.getDecorView());
}