创建一个android的Splash Screen

本文探讨了在Android应用开发中实现简易SplashScreen的功能,包括两种常见方法的对比与实现细节,以及如何优雅地处理触摸事件以提升用户体验。

在开发android应用的时候 ,尤其是游戏的时候,经常需要有一个Splash Screen(就类似于Eclipse启动的画面)。但是,android好像没有对这个有很好的支持(也许我没找到吧)。比如iphone,只需要将 Splash的图片以default命名,就可以可以出现Splash Screen了,方式很简单。那在android中怎么办呢?我试了两种方法,下面我给大家一一道来。

第一种,我采用的方式是在Activity中新开一个线程,这个线程判断过去了多长时间,如果到大了设定的时间,则结束当前的Splash Screen,启动新的Activity,往往是游戏的主菜单。这种方式表面上使用没有任何的问题,但是,当我结束线程的使用stop方法的时候,android实际上跑出了一个异常:不支持这个操作。尽管能够运行,但是有异常,有点不爽。所以我就改造了一下,使用了第二种方法。

第二种,通过Timer和TimerTask,Handler的结合。Timer来计时,TimerTask来判断是不是已经满足设定时间,hanlder来具体启动新的Activity。这种方法比较好,没有出现异常。具体的实现方法:

在Activity中的onCreate方法中,初始化并开始Timer:

timer = new Timer(true);
startTime = System.currentTimeMillis();
timer.schedule(task, 0, 1);

startTime是开始时间,要判断时间差是否满足设定的时间。下面是TimerTask的代码:

private final TimerTask task = new TimerTask() {
                @Override
                public void run() {
                       if (task.scheduledExecutionTime() - startTime == 1000 || !_active) {
                                         Message message = new Message();   
                                         message.what = 0;
                                         timerHandler.sendMessage(message);
                                         timer.cancel();
                                         this.cancel();
                                      }

                }
        };

还有handler的代码:

private final Handler timerHandler = new Handler() {
                public void handleMessage(Message msg) {
                        switch (msg.what) {   
            case 0:
            
                    SplashScreen.this.finish();
                        //start new activity here
                    break;
                        }   
                        super.handleMessage(msg);   
                }
        };

这样一个基本的Splash就实现了。

另外,不知道大家发现没有,我的代码中有一个这个_active变量,这个是做什么的呢?见下面的代码:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            _touched = false;
        }
        return true;
    }

在显示Splash Screen的过程中,如果触摸了屏幕,会直接跳过Splash Screen的,给用户以更高的体验。

没有更深入研究,欢迎大家讨论。

转载于:https://my.oschina.net/dsm/blog/72935

### 实现 Android 应用中的启动屏 为了在 Android 应用中实现启动屏,可以采用多种方法。一种常见的方式是通过创建一个新的 Activity 来显示启动画面,在该 Activity 中设置背景图片作为启动屏幕的内容。 #### 使用 XML 资源文件定义启动屏布局 推荐的做法是将位图资源嵌入到应用程序内部而非外部读取[^1]。因此,可以在 `res/drawable` 文件夹下放置一张用于启动屏的图像,并将其命名为 `splash_screen.xml` 或者其他合适的名字: ```xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Background color --> <item android:drawable="@color/white"/> <!-- Logo centered in the middle --> <item> <bitmap android:gravity="center" android:src="@drawable/ic_launcher"/> </item> </layer-list> ``` #### 创建启动屏主题 接着配置 styles.xml 定义一个新主题来展示启动屏样式: ```xml <style name="Theme.App.SplashScreen" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <item name="windowBackground">@drawable/splash_screen</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">false</item> </style> ``` #### 启动屏 Activity 的 Java 代码示例 最后编写简单的 SplashActivity.java 类,它会在短暂延迟后跳转至主界面: ```java public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set theme before setContentView() setTheme(R.style.Theme_App_SplashScreen); new Handler().postDelayed(() -> { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); }, 2000L); // Delay for 2 seconds } } ``` 上述代码实现了基本功能,即当应用启动时会先加载带有自定义样式的启动页面并停留两秒钟再转向主要的应用程序逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值