- 论坛徽章:
- 80
|
使用ViewSwitcher作为Splash
这个也可以用作Splash。ViewSwitcher是一个ViewGroup,它有二个子View,每次只能显示其中一个。主要做法就是,Activity的RootView设置为ViewSwitcher,把一个布局(如ImageView)作为Splash作为ViewSwitcher的第一个子View;再把Activity的主体布局作为第二个子View;当Activity启动时,先显示作为Splash的ImageView,过几秒后再显示主体布局。事实上ViewSwitcher通常用在Activity需要加载数据,先显示一个进度条,当有数据时再显示真正的布局。
使用ViewSwitcher的优势
使用ViewSwitcher的优势就在于,你可以利用Splash的时间来进行数据的加载,这样用户就不必在等待了Splash之后,再等待数据加载。- <?xml version="1.0" encoding="utf-8"?>
- <ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/view_container"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:inAnimation="@anim/activity_in"
- android:outAnimation="@anim/splash_out">
- <ImageView android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:src="@drawable/kg"
- android:scaleType="fitXY"/>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- <TextView android:id="@+id/header"
- style="@style/header_text" />
- <TextView android:id="@+id/header_tip"
- style="@style/task_text" />
- <ListView android:id="@+id/task_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:footerDividersEnabled="true"
- android:background="@color/white"/>
- </LinearLayout>
- </ViewSwitcher>
复制代码- public class NotTomorrowActivity extends Activity {
- protected static final String TAG = "NoTomorrowActivity";
- protected static final int MSG_SHOW_LAYOUT = 10;
- private static final int MENU_ADD_TASK = 0;
- private Handler mMainHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_SHOW_LAYOUT:
- final ViewSwitcher container = (ViewSwitcher) findViewById(R.id.view_container);
- container.showNext();
- ImageView view = (ImageView) container.getChildAt(0);
- view.setImageResource(0);
- container.removeViewAt(0);
- mSplashing = false;
- break;
- default:
- break;
- }
- }
- };
- private boolean mSplashing;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mSplashing = true;
- setContentView(R.layout.not_tomorrow_activity);
-
- mMainHandler.sendEmptyMessageDelayed(MSG_SHOW_LAYOUT, 5000);
- }
-
- @Override
- public void onBackPressed() {
- if (!mSplashing) {
- super.onBackPressed();
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if (mSplashing) {
- return false;
- }
- menu.add(0, MENU_ADD_TASK, 0, R.string.add_hint);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if (mSplashing) {
- return false;
- }
- return super.onPrepareOptionsMenu(menu);
- }
- }
复制代码 使用ViewSwitcher的缺点
要注意事件
必须在显示Splash的时候禁止BACK,MENU等事件,然后再在Splash结束后把它们重新启用。
没办法全屏
除非主体Activity是全屏的,否则没办法让View全屏,然后再设置回。
逻辑绞在一起,难维护
就如上面的禁止和启用事件一样,这些东西都是在Activity中,所有的逻辑都在一个Activity中,自然难维护和修改,并且易出错。
推荐做法
推荐的做法是不使用Splash的,或者最多在应用程序安装后第一次使用,从用户角度来讲,它毫无意义,所以你看Android或iOS的原生应用中都没有Splash之类的东西。应该让应用直接进入正题,让用户立刻进到他最关心的页面。同样,应用使用提示也是无用的东西,真正的优秀的应该是简洁且操作,不用学就会的,而不是搞出一大堆教程或者提示。与其花时间精力搞Splash或使用提示,还不如想想如何简化操作。 |
|