Android闪屏示例程序

简介:

 用过手机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秒过后进入主界面

示例程序源码下载:

/Files/royenhome/SplashyDemo.rar

相关文章
|
Android开发
被后台杀死后,Android应用如何重新走闪屏逻辑
被后台杀死后,Android应用如何重新走闪屏逻辑
445 0
被后台杀死后,Android应用如何重新走闪屏逻辑
|
JavaScript 前端开发 Android开发
《Android应用开发攻略》——2.6 在Android中创建闪屏
本节书摘来自华章计算机《Android应用开发攻略》一书中的第2章,第2.6节,作者:(美)达尔文(Darwin, I. F.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1274 0
|
Android开发
Android应用icon和闪屏splash的尺寸
icon (尺寸为px) 目录 尺寸 (width * height) drawable 72 x 72 drawable-hdpi 72 x 72 drawable-ldpi 36 x 36 ...
1430 0
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
103 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
18天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。