一个闪屏的Android示例程序-z
2011-11-01 21:35
302 查看
新文章移至 http://cffile.sinaapp.com/?p=45 用过手机QQ的基本上都知道,刚启动程序时候会在一个界面停留一会,按任意键的就直接跳过,这就是所谓的闪屏。那么,在Android中怎样实现这样的效果呢? 1、新建一个Android项目,命名为SplashyDemo,结构如下所示:
2、 添加资源图片: 首先我们得有闪屏时候显示的图片资源文件,并将图片放在res/drawable目录下,命名为splash.jpg: 这时候会在R类中自动添加资源文件对应的ID,如下所示: 3、编写闪屏的界面布局文件,放在res/layout目录下,如下图: 该布局内容如下所示: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <ImageView android:id="@+id/img1" android:src="@drawable/splash" android:layout_width="wrap_content" android:layout_height="wrap_content" > </ImageView> </LinearLayout> 从上述代码中可以看出,界面布局采用的是线性布局(在后面会专门介绍Android中的各种界面布局的),并且子控件仅仅是ImageView用来显示图片。如果你在运行时发现图片偏左偏右或者被拉伸等问题,还请仔细参考下上面代码中的一些布局设置细节,如LinearLayout的gravity属性设置为center以及宽度和高度设置为撑满父容器的模式,ImageView控件的宽度与高度设置为适合子控件模式,并且其数据源通过src属性绑定到drawable 4、编写闪屏界面的逻辑代码: 逻辑代码如下: package cnblogs.com; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; public class SplashyDemo extends Activity { private long m_dwSplashTime=3000; private boolean m_bPaused=false; private boolean m_bSplashActive=true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); Thread splashTimer=new Thread() { public void run(){ try{ //wait loop long ms=0; while(m_bSplashActive && ms<m_dwSplashTime){ sleep(100); if(!m_bPaused) ms+=100; } startActivity(new Intent("com.google.app.splashy.CLEARSPLASH")); } catch(Exception ex){ Log.e("Splash",ex.getMessage()); } finally{ finish(); } } }; splashTimer.start(); } @Override protected void onPause() { super.onPause(); m_bPaused=true; } @Override protected void onResume() { super.onResume(); m_bPaused=false; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode, event); switch(keyCode){ case KeyEvent.KEYCODE_MENU: m_bSplashActive=false; break; case KeyEvent.KEYCODE_BACK: /*两种退出方法*/ /* System.exit(0);*/ /* android.os.Process.killProcess(android.os.Process.myPid());*/ android.os.Process.killProcess(android.os.Process.myPid()); break; default: break; } return true; } } 以上代码参看的是Android Essentials一书, 笔者看的是英文版,对于一些英语不太好的朋友,笔者觉的代为分析下这个示例还是有些意义的。 1)变量解释: Ø m_dwSplashTime:long 类型,为闪屏界面停留的时间,这儿设置为3000也就是3秒 Ø m_Paused: bool 类型,设置该变量可以使得程序暂停在闪屏界面 Ø m_bSplashActive:bool类型,设置该变量可以跳过闪屏,从而快速竟如主程序界面 2)程序结构解释: Ø SplashyDemo继承自Activity,且是程序启动的第一个界面(查看),所以要实现闪屏,我们需要开启一个线程,以便在3秒钟之后进入主界面。这些主要有一个while循环来实现 Ø 在3秒钟结束或者用户选择跳过闪屏后,程序会调用startActivity函数来跳到主界面,传入该函数的参数是一个"com.google.app.splashy.CLEARSPLASH"的intent对象。至于什么是Intent对象,这儿简单的介绍下。Intent对象主要是多个Activity对象之间传递信息、交流的一个对象。并且,当startActivity函数被 调用的时候,Android会搜索所有的描述性文件(manifests文件)直到找到intent Action是"com.google.app.splashy.CLEARSPLASH"的节点。如工程中AndroidManifest.xml文件中部分内容如下: <activity android:name=".MainMenu" android:label="@string/main_name"> <intent-filter> <action android:name="com.google.app.splashy.CLEARSPLASH"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> </activity> 5、 重写下SplashyDmeo中OnPaused和OnResume函数 当程序Pause或者Resume的时候,再稍微做下处理: 1) 当程序Pause时候,设置m_paused=true,从而使得程序暂停 2) 当程序Resume的时候,要设置m_paused=false,从而使得程序恢复正常运行 6、 键盘事件处理 处理键盘事件只需重写下继承自Activity类的onKeyDown函数即可,从示例程序中可以看出,当我们按下Menu键的话,直接跳过闪屏进入主界面;若按 下Back键的话,则直接退出主程序。 7、运行效果 闪屏界面 3秒过后进入主界面 |
相关文章推荐
- 我的Android学习之旅[5]——分析一个闪屏的Android示例程序
- Android闪屏示例程序
- C Primer Plus 第5章 运算符、表达式和语句 5.7 一个示例程序
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
- Android在一个程序中启动另一个程序(包名、类名)
- 一个Android位置监管程序的开发全流程
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- STL库中简单的list类模板示例和一个小的延时程序
- 一个系统引导程序的简单示例1
- C#2.0 一个完整的事件处理程序示例
- Android核心基础-3. 开发一个Android程序-3.4. 了解工程目录结构
- android同一个程序中使用多个地图出现混乱怎么办?!
- Android 开机自启动示例程序
- Android 在一个程序中启动另一个程序
- android在一个app程序中,打开另一个app的方法
- android中写一个九宫格程序
- 使用myeclipse集成struts,hibernate,spring的一个示例程序(转)
- 是不是一个android程序里面必须至少有一个activity
- Android things示例程序sample-simpleui
- 一个hello程序的android内核模块编译方法及在模拟器中进行测试结论