转载请注明出处: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();@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler.postDelayed(new Runnable(){@Overridepublic void run(){Intent intent = new Intent(SplashActivity.this, MainActivity.class);startActivity(intent);}}, 3000);}}

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

@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler.postDelayed(runnable = new Runnable(){@Overridepublic void run(){Intent intent = new Intent(SplashActivity.this, MainActivity.class);startActivity(intent);finish();}}, 3000);}@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler.sendMessageDelayed(handler.obtainMessage(-1), 3000);}@Overridepublic 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了,依然会发生重新进入的现象。

转载于:https://www.cnblogs.com/oversea201405/p/3752039.html

Android Splash界面支持用户点击 直接进入主界面相关推荐

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

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

  2. 6589 开机动画播放完,进入主界面,黑屏无法唤醒

    MT6589 开机动画播放完,进入主界面,黑屏,无法唤醒情况? 资料链接:MT6589

  3. android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作

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

  4. android 仿多米音乐点击弹出歌词界面(部分)

    首先来说,只是实现了歌词界面的弹出和返回效果,没有做任何其他的功能,切界面丑陋无比. 首先来说,这个弹出和隐藏的界面效果就是一个TranslateAnimation 的动画效果,但也有需要注意的一些方 ...

  5. android多类型启动广告,如何在我的应用启动界面实现「开屏广告」?

    什么是开屏广告 开屏广告是一种在应用启动时且在应用主界面显示之前需要被展示的广告.一般是5s展示时间,广告展示时间结束后自动进入应用,用户可以点击跳过按钮直接进入主界面. 开屏广告示例 开屏广告的优势 ...

  6. android 按键用户点击事件,Android按键事件处理过程详解

    Android按键事件处理过程详解 (2013-09-26 14:05:19) 标签: it 在Android系统中,存在多种界面事件,如点击事件.触摸事件.焦点事件和菜单事件等,在这些界面事件发生时 ...

  7. 微信小程序:用户点击跳转付款码界面

    最近工作中遇到一个需求是用户点击活动领取的微信代金券后跳转到微信付款码界面,于是乎,一顿翻文档,说实话,微信小程序的文档翻起来真的-一言难尽. 很快找到了一个wx.requestPayment(Obj ...

  8. Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...

    原标题:安卓用户又少了一项自由,Android 11不再支持更改默认相机程序 来源:量子位 关注前沿科技 萧萧 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧萧 发自 凹非寺 量子位 报道 ...

  9. C# checklistbox用户点击列表框上的一个项目,将选中的项的值显示到界面上,取消勾选时,同步在界面上取消

    简易场景:用户点击列表框上的一个项目,将选中的项的值显示到界面上,取消勾选时,同步在界面上取消. 注意,要在ItemCheck事件里面写(如果在mouseClick事件里写,会有很多坑爹的问题),该事 ...

最新文章

  1. Java - String源码解析及常见面试问题
  2. 【pmcaff】重磅干货,必读的扁平化设计技巧
  3. 【MFC系列-第25、26天】绘图软件
  4. 【HDU - 1220】Cube (组合数学,简单)
  5. 分布式搜索elasticsearch集群监控工具bigdesk
  6. Redis积分排行榜设计与实现第二篇
  7. 利用位运算实现加减乘除
  8. 服务器重置密码后无法启动不了怎么办,Windows Server 2008 R2 忘记密码的处理方法...
  9. C#JSON格式数据的转换
  10. 鸿蒙os2.0手机app开发,鸿蒙OS2.0手机开发者Beta版登场
  11. C. Mortal Kombat Tower(动态规划)Educational Codeforces Round 95 (Rated for Div. 2)
  12. gre模考软件java.exe_【模考】GRE模考软件逆天版(考G神器)
  13. 计算机定时开机命令,如何设置定时开机 定时开机命令设置方法
  14. 试验设计类毕业论文文献有哪些?
  15. 录音文件转换成文字的方法
  16. Key Scan Codes - 键盘按键 扫描码 表 - KeyCode 码 KeyAscII 码 - HackerJLY
  17. 适配Oracle版本的ojbc驱动包版本,以及ojdbc驱动包的下载地址
  18. 【TestOps工程师】【前端高性能计算】【神经网络】【支付宝接入】| Chat · 预告
  19. opc客户端读取数据品质是bad_OPC DCOM配置过程中常见问题及其处理_济南达索机电科技有限公司...
  20. php开发的支付宝、微信个人免签支付接口

热门文章

  1. mysql 所有表的字段信息_mysql如何查询所有表和字段信息
  2. 如何从stackoverflow的api 中获取是数据_教你拼多多如何选款、测款,打造出爆款。...
  3. linux中文麻酱字_【树】Linux笔记 1
  4. linux的逻辑运算参数,Linux基础之bash脚本编程初级-逻辑运算与测试
  5. mysql 表a不存在表b_[mysql]SQL查询存在A表但不存在B表的数据
  6. 瑞尔森大学的计算机科学专业,瑞尔森大学有哪些专业处于世界顶尖水平?
  7. 我叫Java,2019年总结,大家请查收
  8. PostgreSql、MySql字段值为空时取其他值语句
  9. 深度学习在图像领域的几大任务
  10. 数据结构和算法:(1)数据结构的基本知识