转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23613403

现在大部分APP都有Splash界面,下面列一下Splash页面的几个作用:

1、展示logo,提高公司形象

2、初始化数据 (拷贝数据到SD)

3、提高用户体验

4、连接服务器是否有新的版本等。

不过如果Splash页面不做任何操作时,我更喜欢提供个用户点击Splash界面直接进入主界面。

一般我们的SplashActivity会这么写:

package com.example.testsplashdemo;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent; 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);
} }

现在我们添加个用户触摸屏幕直接进入主界面:

@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秒后还是会再进入一次主界面。

于是我们改写代码为:

package com.example.testsplashdemo;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent; 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);
} }

定义了个Runnable对象,用户点击后移除回调事件,解决了。

利用handler.postDelay和removeCallback还可以判断用户是否长按操作等。

可能有些哥们会问,我一般是通过发送消息进入主界面的,有什么好的处理方案吗?

由于原理类似,我就直接贴代码了:

package com.example.testsplashdemo;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent; 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了,依然会发生重新进入的现象。

Android Splash界面支持用户点击 直接进入主界面的更多相关文章

  1. MATLAB R2017a 进入主界面以后一直处于初始化状态的解决办法

    自从前几天更新了win10系统,结果发现matlab不能用了,进入主界面一直初始化,没完没了. 网上说可能是许可证等问题,但经过尝试发现仍然无法解决问题. 仔细一想,发现win10系统的防火墙默默把它 ...

  2. SourceTree 03 - 跳过账号登录直接进入主界面

    SourceTree系列第1篇 SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/geaosu/p/8807666.html) SourceTree系列 ...

  3. Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)

    1. getevent命令 我们首先是根据adb shell getevent命令获取到被点击位置的信息. 这里要说明的是,不同的手机手机获得的点击输出是不一样的.以我的真机为例,输出如下 本文原创, ...

  4. android 代码实现模拟用户点击、滑动等操作

    /** * 模拟用户点击 * * @param view 要触发操作的view * @param x 相对于要操作view的左上角x轴偏移量 * @param y 相对于要操作view的左上角y轴偏移 ...

  5. ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)

    1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...

  6. ViewPager滑动到最后一页再向左滑动进入主界面

    在OnPageChangeListener中的onPageScrolled方法里判断 @Override public void onPageScrolled(int arg0, float arg1 ...

  7. Android应用--新浪微博客户端新特性滚动视图和启动界面实现

    新浪微博客户端新特性滚动视图和启动界面实现 2013年8月20日新浪微博客户端开发之启动界面实现 前言: 使用过新浪微博客户端的童鞋都清楚,客户端每一次升级之后第一次启动界面就会有新特性的介绍,用户通 ...

  8. android 点击重新加载界面设计

    在项目中经常会遇到这样的场合,用户点击了一个界面后要提示等待加载,最后有可能显示加载失败,点击屏幕再重试加载.下面是该实例的代码: layout: loading.xml <?xml versi ...

  9. Android studio 开发一个用户登录界面

    Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...

随机推荐

  1. Android在子线程中更新UI(二)

    MainActivity如下: package cc.testui2; import android.os.Bundle; import android.view.View; import andro ...

  2. Cocos2d-x v3.0正式版尝鲜体验【3】 Label文本标签

    Cocos2d-x在新版本号中增加了新的Label API.和以往不同的是,2.x的版本号是通过三个不同的类来创建不同的文本标签,而如今是模仿着精灵的创建方式.一个类创建不同形式的文本,只是核心内容还 ...

  3. MySQL 模拟Oracle邻接模型树形处理

    数据库对层次结构的处理模型有好多种,能够依据自己的需求来设计模型.当然最简单的也是最easy设计的模型就是所谓的邻接模型.在这方面,其它数据库比方Oracle 提供了现成的分析方法 connect b ...

  4. Problem and Solution Code Snippets

    (积累知识,遇到发展,本文仅用于备忘录,不时它需要召回准备) Problem: 依据String的大小来调整Label的frame.在view中又一次更新views的layout并显示. Soluti ...

  5. java导入excel

    package com.duosen.gate.test; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  6. C语言中结构体參数变量的传递

    [文章摘要] 在C语言中,结构体參数变量常常作为函数的參数来进行传递.但假设參数设置不当.会出现内存问题. 本文以实际的程序代码为例.具体地介绍怎样正确地使用结构体參数变量.为相关的开发工作提供了參考 ...

  7. Oracle中decode函数 列变成行

    create table t_class(c_Id  number(10) primary key ,stuName varchar2(50),  --人名c_Name varchar2(50),   ...

  8. 《JavaScript设计模式与开发实践》读书笔记之单例模式

    1.单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.1 传统的单例模式 var Singleton=function(name){ this.name=name; } Single ...

  9. C#获取设备的IP和Mac类

    /// <summary> /// 此类用于获得设备的Ip和Mac /// </summary> public class Mac { [DllImport("Iph ...

  10. 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本

    使用angular resource载入中priorityData.json中间json数据,结合D3绘制甜甜圈图.执行index.html其结果见于图.: priorityData.json中jso ...