如何为程序添加splashScreen

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为程序添加splashScreen相关的知识,希望对你有一定的参考价值。

参考技术A 启动界面Splash Screen在应用程序是很常用的,往往在启动界面中显示产品Logo、公司Logo或者开发者信息,如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。

android 应用程序创建一个启动界面Splash Screen非常简单。比如创建一个工程MySample,主Acitity就叫MySample,创建另一个Activity叫 SplashScreen,用于显示启动界面,资源文件为splash.xml。至于如何制作SplashSceen界面,这不是本文章要讨论的东西,就此略过。

SplashScreen的代码如下:
package com.ctoof.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;

public class SplashScreen extends Activity
protected boolean _active = true;
protected int _splashTime = 5000;

@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);

Thread splashTread = new Thread()
@Override
public void run()
try
int waited = 0;
while(_active && (waited < _splashTime))
sleep(100);
if(_active)
waited += 100;


catch(InterruptedException e)
// do nothing
finally
finish();
// 启动主应用
startActivity(new Intent("com.ctoof.android.MySample.MyApp"));
stop();


;
splashTread.start();


@Override
public boolean onTouchEvent(MotionEvent event)
if (event.getAction() == MotionEvent.ACTION_DOWN)
_active = false;

return true;


然后在AndroidMainfest.xml中修改代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=""
package="com.ctoof.android"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SplashScreen"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MyApp">
<intent-filter>
<action android:name=" com.ctoof.android. MySample.MyApp " />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
</manifest>

在这里负责注册两个活动。把负责管理启动界面Splash Screen的活动Activity作为应用程序的主活动,然后在SplashScreen中负责启动MyApp。

另:
很多应用都会有一个启动界面。欢迎画面慢慢隐现,然后慢慢消隐。实现这种效果的方法有两种(暂时只发现两种)
1、使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一张Activity。
2、使用一个Activity,可以用到View.gone() 这个方法。把Acitivity的某些元素移除。
Java代码
public class Splash extends Activity

private final int SPLASH_DISPLAY_LENGHT = 3000; //延迟三秒

@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable()

@Override
public void run()
Intent mainIntent = new Intent(Splash.this,Main.class);
Splash.this.startActivity(mainIntent);
Splash.this.finish();


, SPLASH_DISPLAY_LENGHT);


当然可以再Splash中加入动画效果。

WPF:如何为程序添加splashScreen?

原文:WPF:如何为程序添加splashScreen?

大家是否还记得在Windows Forms程序中如何实现splashScreen吗?我们一般都会使用Microsoft.VisualBasic.dll中提供的那个WindowsFormsApplicationBase类型,它有一个所谓的splashscreen属性,可以指定为一个窗体的。

那么,同样的需求在WPF中如何实现呢?这要从两头来说,从简单来说,它实在是简单了。

事实上,这是.NET Framework 3.5sp1的一个特性

http://blogs.msdn.com/jgoldb/archive/2008/08/12/what-s-new-in-wpf-3-5-sp1-splash-screen-to-improve-perceived-startup-perf.aspx

 

 

考虑到大部分的splashscreen其实都只是一个图片,所以最简单的做法是,先导入一张图片,然后设置它的生成操作为“splash screen”

技术分享图片

注意,其他什么都不要做,此时运行程序的话,就可以看到效果

技术分享图片

注意:虽然我们的图片是gif的格式,但显示出来的效果却是静态的。

 

那么,到底发生了什么,让他具有了这个特性呢?我们可以打开项目的文件,就是那个csproj文件

技术分享图片 

原来它是通过在项目文件中声明一个SplashScreen来实现的。

[注意]这个文件是给msbuild这个工具用的。

[思考]所以试想一下,一个应用程序是否可以有多个SplashScreen呢?

 

同时,我们还可以打开IL代码来了解一下,

技术分享图片

从上面的il代码可以很直观地看出来,其实它是先实例化了一个SplashScreen,然后调用了它的Show方法而已。

如果是这样的话,我们当然也可以自己写代码来实现

首先,让我们将图片的生成操作修改为“嵌入的资源”

技术分享图片

然后通过下面的代码就可以实现功能

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace WpfApplication1
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            SplashScreen s = new SplashScreen("20080320132823923.gif");
            s.Show(true);

            base.OnStartup(e);
        }
    }
}

值得一提的是,目前看来,也没有办法加载一个窗口作为SplashScreen。

如果希望闪屏至少显示多少时间,则可以考虑下面的代码

            SplashScreen s = new SplashScreen("20080320132823923.gif");
            s.Show(false);
            s.Close(new TimeSpan(0, 0, 10));

以上是关于如何为程序添加splashScreen的主要内容,如果未能解决你的问题,请参考以下文章

WPF:如何为程序添加splashScreen?

如何为 C++ 程序添加定时延迟?

如何为程序添加splashScreen

如何为程序添加splashScreen

Spring session jdbc - 如何为单个应用程序添加多个 HttpSessionIdResolver

如何为 MFC 中的线程完成添加事件处理程序?