当前位置: 首页 > 编程日记 > 正文

Android Splash界面支持用户点击 直接进入主界面

转载请注明出处: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

相关文章:

Python爬一下抖音上小姐姐的视频~

image.png在简书也码了1W多字了,发现还是爬虫类的文章看的人多。 算法工程师现在都啥价位了,你们还在看爬虫→_→ 介绍 这次爬的是当下大火的APP--抖音,批量下载一个用户发布的所有视频。 各位也应该知道,抖音只有移动端&#xff…

哈哈,我的博客开通啦,欢迎光临~~~~~~~~~~~~

毕业快一年了,参加工作一年多了,几多苦闷,几多快乐。用某某人的话说就是“痛苦并快乐着!”。工作了,才发现现实和理想真的有差距啊!但我将直面“惨淡”的程序人生。希望与同龄人,不同龄人共勉。…

逻辑回归:确定一个人是否年收入超过5万美元

文章目录1. 问题描述2. 设计简要描述3. 程序清单4. 结果分析5. 调试报告6. 实验小结1. 问题描述 学会使用学习到的逻辑回归的知识,手动使用梯度下降方法,通过给定的相关数据来完成年薪是否高于50k的二分类预测任务。 2. 设计简要描述 机器学习的三个基…

【特征匹配】ORB原理与源码解析

相关 : Fast原理与源码解析 Brief描述子原理与源码解析 Harris原理与源码解析 http://blog.csdn.net/luoshixian099/article/details/48523267 ORB特征提取详解 ORB特征点检测 为了满足实时性的要求,前面文章中介绍过快速提取特征点算法Fast,以及特征描述子Brief。…

C# 的三种序列化方法

序列化是将一个对象转换成字节流以达到将其长期保存在内存、数据库或文件中的处理过程。它的主要目的是保存对象的状态以便以后需要的时候使用。与其相反的过程叫做反序列化。 序列化一个对象 为了序列化一个对象,我们需要一个被序列化的对象,一个容纳被…

DotNetNuke(DNN)网站发布、部署、迁移和重建

DotNetNuke(DNN)网站本质上是一个ASP.NET网站,由网站文件(也就是website目录)和数据库组成的,所以,“发布、部署、迁移和重建”实际上也就是把网站文件和数据库文件拷贝到服务器上并修改相应设置的过程。对于"发布…

PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类

文章目录(一) 问题描述(二) 设计简要描述(三) 程序清单(四) 结果分析(五) 调试报告(六) 实验小结(七) 参考资料(一) 问题描述 构建卷积神经网络实现MNIST手写数字分类。 (二) 设计简要描述 机器学习的三个基本步骤—— 程序设计思路——(此图放大可看清) (三) 程序清单 …

from selenium.webdriver.support.ui import Select

from selenium.webdriver.support.ui import SelectSelect(d.find_element_by_id(ukey_开户行)).first_selected_option.text转载于:https://www.cnblogs.com/paisen/p/3669272.html

rocketmq-flink

https://github.com/apache/rocketmq-externals/tree/master/rocketmq-flink https://issues.apache.org/jira/browse/ROCKETMQ-82

基于Numpy构建全连接前馈神经网络进行手写数字识别

文章目录(一) 问题描述(二) 设计简要描述(三) 程序清单(四) 结果分析(五) 调试报告(六) 实验小结(一) 问题描述 不使用任何机器学习框架,仅仅通过Numpy库构建一个最简单的全连接前馈神经网络,并用该网络识别mnist提供的手写数字体。 (二) 设计简要描述…

sqlserver 三种恢复模式

sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何使用事务日志,如何选择它要记录的操作,以及是否截断日志。截断事务日志是删除己执行事务并把该日志空间让给新事务的过程&…

Confluence 6 配置日志

我们推荐你根据你的需求来配置你自己的 Confluence 日志。你可以有下面 2 种方法来修改你的日志:通过 Confluence 管理员控制台进行配置 – 你的修改仅在本次修改有效,下次重启后将会把所有修改重置。编辑属性文件 – 你的修改将会在下次重启后生效同时针…

最近最近在微软的Mobile Soft factory

最近公司在做PDA项目的开发, 我主要负责Mobile的框架设计和开发。以前都是在做winform程序,对Mobile 的开发 知之甚少,现在突然开始做mobile的项目,压力有点大! 不知该从何处下手,幸好发现微软提供的Mobile…

神经网络训练技巧

文章目录一、问题描述二、 设计简要描述三、程序清单四、结果分析五、调试报告六、实验小结一、问题描述 基于二元函数f(x,y)z1/20 x2y2掌握梯度下降和权重初始化的技巧,基于手写体识别掌握正规化和两种防止过拟合的技巧。 二、 设计简要描述 梯度下降方法 1.1.1 …

Unix的轻巧“约取而实得”(上篇)

在经过上机操作实践以及掌握Unix系统相关的基础知识之后,可以说已跨进了迈向成功的门槛。接着要登堂入室,继续专进,就必须更加深入的了解Unix基本命令的功能、使用并掌握一些必备的技巧。这一轮学习会有一定难度,需要强烈的求知欲…

操作系统2--操作系统结构

操作系统结构 操作系统的结构需要从这几个方面来考虑:他为用户提供了哪些服务和界面,系统各个组成部分及其相互关系 操作系统的操作 大致可分为:进程管理,主存管理,文件管理,辅存管理和IO管理 进程管理 进程的创建和结束进程的挂起和恢复进程锁\进程交互\进程死锁的规则内存管理…

Windows环境下启动Mysql服务提示“1067 进程意外终止”的解决方案

2019独角兽企业重金招聘Python工程师标准>>> 在Windows服务里启动Mysql服务时提示“1067 进程意外终止”。 此时我们打开计算机管理查看Windows日志,如下图所示: 完整错误提示如下: The server option lower_case_table_names is …

不使用任何框架实现CNN网络

文章目录一、 问题描述二、 设计简要描述三、程序清单四、结果分析五、调试报告六、实验小结一、 问题描述 基于Numpy和函数im2col与col2im来实现一个简单的卷积神经网络,将其用于手写体识别。 二、 设计简要描述 机器学习的三个基本步骤—— 程序设计思路——(…

关于刘冬大侠Spring.NET系列学习笔记3的一点勘正

诚如他第22楼“只因渴求等待”提出的疑问一样,他的下面那一段代码是存在一点点问题的, XElement root XElement.Load(fileName);var objects from obj in root.Elements("object") select obj; 如果照搬照抄刘冬大侠的这段代码那是不会成功读…

什么叫做KDJ指标

什么叫做KDJ指标 KDJ指标的中文名称是随机指数,最早起源于期货市场。 KDJ指标的应用法则KDJ指标是三条曲线,在应用时主要从五个方面进行考虑:KD的取值的绝对数字;KD曲线的形态;KD指标的交叉;KD指标的背离&a…

vim常用命令总结 (转)

在命令状态下对当前行用 (连按两次), 或对多行用n(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版,相当于一般IDE里的code format。使用ggG可对整篇代码进行排版。 vim 选择文本&…

敏捷过程、极限编程和SCRUM的关系

极限编程是最知名的敏捷开发过程,SCRUM是最经典的极限编程。 层次关系从大到小是:敏捷过程>极限编程>SCRUM

C#双面打印解决方法(打印word\excel\图片)

最近需要按顺序打印word、excel、图片,其中有的需要单面打印,有的双面。网上查了很多方法。主要集中在几个方式解决 1、word的print和excel的printout里设置单双面 2、printdocument里的printsettings的duplex设置单双面 试过之后效果都不好,…

【leetcode】589. N-ary Tree Preorder Traversal

题目如下: 解题思路:凑数题1,话说我这个也是凑数博? 代码如下: class Solution(object):def preorder(self, root):""":type root: Node:rtype: List[int]"""if root None:return []re…

MSDN Visual系列:创建Feature扩展SharePoint列表项或文档的操作菜单项

原文:http://msdn2.microsoft.com/en-us/library/bb418731.aspx在SharePoint中我们可以通过创建一个包含CustomAction元素定义的Feature来为列表项或文档添加一个自定义操作菜单项(Entry Control Block Item)。我们可以添加自定义命令到默认的SharePoint用户界面中。…

评审过程中,A小组发现了5个缺陷,B小组发现了9个缺陷,他们发现的缺陷中有3个是相同的。请问:还有多少个潜在的缺陷没有发现?

分析:这一个“捉-放-捉”问题 背景: 求解: 可以将A看成是第一次捕捉,发现了5个缺陷,全部打上标记 B看成是第二次捕捉,发现了9个缺陷,其中有3个有标记 那么可以算出系统中一共存在的缺陷数量为…

Dell PowerVault TL4000 磁带机卡带问题

最近一段时间Dell PowerVault TL4000 磁带机故障频繁,昨天我在管理系统里面看到Library Status告警:HE: sled blocked, error during sled movement to rotation position Code: 8D 07 ,Dell工程师根据Code: 8D 07判断是磁带卡带了&#xff0…

【git】git入门之把自己的项目上传到github

1. 首先当然是要有一个GIT账号:github首页 2. 然后在电脑上安装一个git:git首页 注册和安装这里我就不说了。我相信大家做这个都没有问题。 3. 上述两件事情做完了,就登陆到github页面 1)首先我们点标注【1】的小三角,…

Java面试查漏补缺

一、基础 1、&和&&的区别。 【概述】 &&只能用作逻辑与(and)运算符(具有短路功能);但是&可以作为逻辑与运算符(是“无条件与”,即没有短路的功能)&#xf…

selenium之frame操作

前言 很多时候定位元素时候总是提示元素定位不到的问题,明明元素就在那里,这个时候就要关注你所定位的元素是否在frame和iframe里面 frame标签包含frameset、frame、iframe三种,frameset和普通的标签一样,不会影响正常的定位&…