zoukankan      html  css  js  c++  java
  • android的Splash Screen

    http://www.eoeandroid.com/thread-8225-1-1.html

    在开发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的,给用户以更高的体验。


    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    Delphi XE2 update4 很快就要来了
    树型菜单表的合并。
    VS宏 之 选中解决方案中的文件
    Mvc,接收复杂对象。
    SQL 2008 CLR开发自定义聚合函数
    数据库主键按业务规则生成的解决方案。
    一些独特的语言思考
    vs环境设置
    SqlServer 2005+ 开发问题
    记录 VS 中的生成时间
  • 原文地址:https://www.cnblogs.com/anee/p/2675813.html
Copyright © 2011-2022 走看看