Android创建启动画面

每一个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO、公司的LOGO或者开发人员信息。假设应用程序启动时间比較长,那么启动界面就是一个非常好的东西,能够让用户耐心等待这段枯燥的时间。

  1.制作Splash界面
  突出产品LOGO,产品名称,产品主要特色;
  注明产品的版本号信息;
  注明公司信息或者开发人员信息;
  背景图片,亦能够用背景颜色取代;

  2.处理后台资源
  大多数的Splash界面都是会等待一定时间,然后切换到下一个界面;
  事实上,在这段时间里,能够对系统状况进行检測,比方网络是否通,电源是否充足;
  或者,预先载入相关数据;
  为了能让启动界面展现时间固定,须要计算运行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间;

  思路有两个,一个是用两个Activity来做,一个用来做启动画面,还有一个是主页面;还能够用一个Activity来做,程序启动时显现启动画面,当启动完毕后,它会被隐藏来。

方法一:两个Activity,通过线程延迟指定的时间再运行Activity的跳转,我们须要建立两个Activity,一个是SplashActivity,用来做启动画面。还有一个是HelloWorldActivity。在这里仅仅是说明怎样来做启动画面,所以就不具体来完毕Activity了。

核心代码:

package com.demo.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashActivity extends Activity {

	private final int SPLASH_DISPLAY_LENGHT = 6000; // 延迟六秒

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

		new Handler().postDelayed(new Runnable() {
			public void run() {
				Intent mainIntent = new Intent(SplashActivity.this,
						HelloWorldActivity.class);
				SplashActivity.this.startActivity(mainIntent);
				SplashActivity.this.finish();
			}

		}, SPLASH_DISPLAY_LENGHT);

	}
}

说明:

Handler().postDelayed  是延迟指定的时间再运行

Handler类主要能够使用例如以下3个方法来设置运行Runnable对象的时间:

//  马上运行Runnable对象
public final boolean post(Runnable r);
//  在指定的时间(uptimeMillis)运行Runnable对象
public final boolean postAtTime(Runnable r, long uptimeMillis);
//  在指定的时间间隔(delayMillis)运行Runnable对象
public final boolean postDelayed(Runnable r, long delayMillis); 

以下两行代码启动一个新的Activity,同一时候关闭当前Activity。

SplashActivity.this.startActivity(mainIntent);
SplashActivity.this.finish();

以下再讲一下Activity的生命周期,方便大家理解Activity的跳转。

如上所看到的,Android 程序猿能够决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序猿能够启动一个 Activity,可是却不能手动的“结束”一个 Activity。

当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完毕了对应的工作,能够被“回收”。

随后 Activity Manager 激活处于栈第二层的 Activity 并又一次入栈,同一时候原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。

比如上面样例中:从 SplashActivity 中启动了 HelloWorldActivity,则当前处于栈顶端的是 HelloWorldActivity,第二层是 SplashActivity 。

当我们调用 SplashActivity.finish()方法时(我们是在SplashActivity中通过SplashActivity.this.finish()调用的),SplashActivity 从 Active 状态转换 Stoped 状态,并被系统从栈中移除,标志能够被“回收”。

Activity 的状态与它在栈中的位置关系例如以下图:

上图的样例是

从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们在 Activity2中调用 Activity2.finish()方法时,Activity Manager 又一次激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,同一时候标注Activity2能够被“回收” 。Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被运行,Activity2 返回的数据通过 data參数返回给 Activity1。

还有一点要注意的是,不要忘了改动AndroidManifest.xml文件。例如以下:

<?xmlversion="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	      package="com.demo.app"
	      android:versionCode="1"
	      android:versionName="1.0"
	    <applicationandroid:icon="@drawable/icon";android:label="@string/app_name">
	        <activityandroid:name=.SplashActivity"
	                  android:label="@string/app_name"> ;
	            <intent-filter>
	                <actionandroid:name="android.intent.action.MAIN"/>
	                <categoryandroid:name="android.intent.category.LAUNCHER"/>
	            </intent-filter>
	        </activity>
	    <activityandroid:name="Main">
	    </activity>
	</application>
 <uses-sdkandroid:minSdkVersion="3"/>
</manifest>

方法二:一个 Activity来做。程序启动时显现启动画面,当启动完毕后,它会被隐藏来

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<LinearLayout android:id="@+id/splashscreen"
		android:orientation="vertical"
                android:layout_width="fill_parent"
		android:layout_height="fill_parent">

		<TextView android:id="@+id/info"
                        android:layout_width="fill_parent"
			android:layout_height="wrap_content"
                        android:gravity="center"
			android:paddingTop="10px"
                        android:text="This is a splash !" />
	</LinearLayout>

	<TextView android:layout_width="fill_parent"
		android:paddingTop="10px"
                android:layout_height="wrap_content"
		android:text="This is a Context" />
</LinearLayout>

说明:

这里有一个id为splashscreen的LinearLayout,是程序启动时显现的部分。当启动完毕后,它会被隐藏。

核心代码:

package com.demo.app;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	private LinearLayout splash;
	private TextView tv;

	private static final int STOPSPLASH = 0;
	// time in milliseconds
	private static final long SPLASHTIME = 1000;

	private Handler splashHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case STOPSPLASH:
				SystemClock.sleep(4000);
				splash.setVisibility(View.GONE);
					break;
			}
			super.handleMessage(msg);
		}
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().requestFeature(Window.FEATURE_PROGRESS);
		setContentView(R.layout.main);

		splash = (LinearLayout) findViewById(R.id.splashscreen);
		tv = (TextView) findViewById(R.id.info);
		tv.setText("正在建立数据连接");

		Message msg = new Message();
		msg.what = STOPSPLASH;
		splashHandler.sendMessageDelayed(msg, SPLASHTIME);
	}
}

当在应用启动后发送一个消息,把指定区域设置为隐藏, splash.setVisibility(View.GONE); 就实现了启动界面。

总结一下,个人认为还是第一个方法比較合适,当一个程序主Activity里的东西比較多的时候,假设我们还把启动画面也加进去,势必会影响程序的效率,所以实际应用的话,第一个方法是首选。

时间: 2024-11-08 19:23:48

Android创建启动画面的相关文章

【Android笔记】Android创建启动画面

每个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO.公司的LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间. 1.制作Splash界面 突出产品LOGO,产品名称,产品主要特色: 注明产品的版本信息: 注明公司信息或者开发者信息: 背景图片,亦可以用背景颜色代替: 2.处理后台资源 大多数的Splash界面都是会等待一定时间,然后切换到下一个界面: 其实,在这段时间里,可以对系统状况进行检测,比如

Android程序启动画面 Splash

很多应用都会有一个启动界面.欢迎画面慢慢隐现,然后慢慢消隐. 我的方式是使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一张Activity. splash.java package com.yuyidong.second; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import andro

从零开始学Xamarin.Forms(三) Android 制作启动画面

Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:android="h

Android App启动画面的制作

安卓软件启动时,都会有一个全屏的带LOGO,软件名称,版本号的启动屏幕.这个屏幕是怎么做出来的呢!!下面就一步一步的来! 一.新建项目 打开eclipse,新建一个Android项目,不建Activity.这时就出现一个空白的项目. 1.新建Activity文件 点击项目管理里的res,进入layout,右键点击NEW->Project->Android->Android XML Layout File 按步骤新建一个Activity的XML文件 我是选择新建了一个RelativeLay

Xamarin.Forms (Android制作启动画面)

http://blog.csdn.net/zapzqc/article/details/38496117 Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: [html] view plain copy <?xml version="

初学Android 创建 启动 停止Service 五十八

Service跟Windows系统里的服务概念差不多,都在后台执行,它跟Activity的最大区别就是,它是无界面的 开发Service与开发Activity的步骤类似 1.定义一个继承Service的子类 2.在AndroidManifest.xml文件中配置该Service Service与Activity还有一点相似之处,它们都是从Context派生出来的,因此它们都可调用Context里定义的如getResources(),getContentResolver()等方法 下面写一个简单的

Android App启动画面实现

app打开时都会有个启动画面(一幅图.一个提示之类的),画面停留2-3秒,然后结束掉自己,启动要呈现的第一个activity. Handler的postDelayed方法就很适合实现这个功能.它相当于一个定时器,可以使所在绑定了该handler的所在线程延时执行一段代码. postDelayed(Runnable r,long uptimeMillis); 第一个参数是要延时执行的代码段.第二个参数是要延长多少秒.     private Handler mHandler = new Handl

Android添加全屏启动画面

有的Android软件需要在启动的时候显示一个启动画面,可以是一张图或者一些设置什么呢,还有一个好处就是,可以趁机在后台加载数据. 创建启动画面一般有两种方式:1.建立一个activity,展示启动画面,然后再启动主Activity2.在主Activity建立一个展示区,然后隐藏掉. 第二个其实更简单,但是这个就展示一次的东西戳在代码里,怎么想都不舒服,而且还可能设计效率问题.所以在项目里还是选用第一种. 首先建立一个Activity,这里明明为HelloActivity,界面就是activit

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要: 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen).因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen