Android的Splash界面支持用户点击

一、Splash使用背景

现在大部分APP都有Splash界面,下面列一下Splash页面的几个作用:
1、展示logo,提高公司形象
2、初始化数据 (拷贝数据到SD)
3、提高用户体验
4、连接服务器是否有新的版本等。

二、样例

1、使用Splash的一般方式

public class SplashActivity extends Activity  
{  
    private Handler handler = new Handler();  

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

        handler.postDelayed(new Runnable()  
        {  
            @Override  
            public void run()  
            {  
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
                startActivity(intent);  
            }  
        }, 3000);  
    }  

}  

2、假如现在想实现点击Splash界面的图片,跳转到指定界面
再添加如下代码:

 @Override  
    public boolean onTouchEvent(MotionEvent event)  
    {  
        if(event.getAction()==MotionEvent.ACTION_UP)  
        {  
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
            startActivity(intent);  
            finish();  
        }  
        return super.onTouchEvent(event);  
    }  

3、存在重复跳转到MainActivity界面的问题

二、改进

1、使用Runnable对象

public class SplashActivity extends Activity  
{  
    private Handler handler = new Handler();  
    private Runnable runnable;  

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

        handler.postDelayed(runnable = new Runnable()  
        {  
            @Override  
            public void run()  
            {  
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
                startActivity(intent);  
                finish();  
            }  
        }, 3000);  
    }  

    @Override  
    public boolean onTouchEvent(MotionEvent event)  
    {  

        if(event.getAction()==MotionEvent.ACTION_UP)  
        {  
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
            startActivity(intent);  
            finish();  
            if (runnable != null)  
                handler.removeCallbacks(runnable);  
        }  

        return super.onTouchEvent(event);  
    }  

}  

2、使用message消息,因为removeMessages()方法必须要传入一个int值,所以任意取值为-1

public class SplashActivity extends Activity  
{  
    private Handler handler = new Handler()  
    {  
        public void handleMessage(android.os.Message msg)  
        {  
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
            startActivity(intent);  
            finish();  

            handler.removeMessages(-1);  
        };  

    };  
    private Runnable runnable;  

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

        handler.sendMessageDelayed(handler.obtainMessage(-1), 3000);  
    }  

    @Override  
    public boolean onTouchEvent(MotionEvent event)  
    {  

        if (event.getAction() == MotionEvent.ACTION_UP)  
        {  
            handler.sendMessage(handler.obtainMessage(-1));  
            finish();  
        }  

        return super.onTouchEvent(event);  
    }  

}  

三、此外,不建议使用这种方式,存在问题

private Handler handler = new Handler()  
    {  
        public void handleMessage(android.os.Message msg)  
        {  
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);  
            intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  
            startActivity(intent);  
            finish();  

        };  

    };  

其余代码和上面的代码一样,就去掉了移除消息的部分,添加了一个Intent的flag。当仅有这两个Activity时是没有问题的,感觉也可以。但是要明白FLAG_ACTIVITY_SINGLE_TOP的含义是,当此Activity存在且位于栈顶时复用,也就是说,3秒内用户进入别的Activity了,依然会发生重新进入的现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值