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(); @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界面支持用户点击 直接进入主界面的更多相关文章
- MATLAB R2017a 进入主界面以后一直处于初始化状态的解决办法
自从前几天更新了win10系统,结果发现matlab不能用了,进入主界面一直初始化,没完没了. 网上说可能是许可证等问题,但经过尝试发现仍然无法解决问题. 仔细一想,发现win10系统的防火墙默默把它 ...
- SourceTree 03 - 跳过账号登录直接进入主界面
SourceTree系列第1篇 SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/geaosu/p/8807666.html) SourceTree系列 ...
- Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)
1. getevent命令 我们首先是根据adb shell getevent命令获取到被点击位置的信息. 这里要说明的是,不同的手机手机获得的点击输出是不一样的.以我的真机为例,输出如下 本文原创, ...
- android 代码实现模拟用户点击、滑动等操作
/** * 模拟用户点击 * * @param view 要触发操作的view * @param x 相对于要操作view的左上角x轴偏移量 * @param y 相对于要操作view的左上角y轴偏移 ...
- ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)
1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...
- ViewPager滑动到最后一页再向左滑动进入主界面
在OnPageChangeListener中的onPageScrolled方法里判断 @Override public void onPageScrolled(int arg0, float arg1 ...
- Android应用--新浪微博客户端新特性滚动视图和启动界面实现
新浪微博客户端新特性滚动视图和启动界面实现 2013年8月20日新浪微博客户端开发之启动界面实现 前言: 使用过新浪微博客户端的童鞋都清楚,客户端每一次升级之后第一次启动界面就会有新特性的介绍,用户通 ...
- android 点击重新加载界面设计
在项目中经常会遇到这样的场合,用户点击了一个界面后要提示等待加载,最后有可能显示加载失败,点击屏幕再重试加载.下面是该实例的代码: layout: loading.xml <?xml versi ...
- Android studio 开发一个用户登录界面
Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...
随机推荐
- 【C语言天天练(二四)】内存分配
引言: 对于C语言程序,了解它执行时在内存中是怎样分配的对于我们理解它的执行机制是很实用的.以下就总结一下C语言程序的一些内存分配知识. 一 一段C程序.编译连接后形成的可运行文件一般有代码段.数据段 ...
- 千万别用模板给的list.size()巨坑
要用!list.empty()取代i<list.size();否则就不会AC了.
- Embedded Linux Primer----嵌入式Linux基础教程--前言
APractical,Real-WorldApproach ChristopherHallinan 计算机无处不在. 事实上,当然了,对于那些大约在过去25年期间没有生活在洞穴中的人来说没有什么惊奇的 ...
- js关闭浏览器窗口事件
js关闭浏览器窗口 js关闭浏览器窗口,不弹出提示框.支持ie6+,火狐,谷歌等浏览器. <html> <head /> <body> <script typ ...
- 模拟spring框架注入实现原理
这个我是参见了别人的一些东西,不是原创! 定义一些抽象的方法: package com.huxin.springinject.dao; public interface Person { public ...
- php 多进程中的信号问题
1.以下代码sleep时间远小于20 <?php // 当子进程退出时,会触发该函数 function sig_handler($sig) { switch($sig) { case SIGCH ...
- nyist oj 311 全然背包 (动态规划经典题)
全然背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是 ...
- HTML5 Canvas 填充与描边(Fill And Stroke)
HTML5 Canvas 填充与描边(Fill And Stroke) 演示HTML5 Canvas Fill 与Stroke文字效果,基于Canvas如何实 现纹理填充与描边. 一:颜色填充与描边 ...
- PHP上传文件超过了最大文件大小限制导致无法上传成功
最近的研究<HeadFirst PHP & MySQL>第一本书5章"使用存储在文件中的数据",难道当一个文件上传应用程序,发生了错误.即,文件不能成功上传.这 ...
- 【淡墨Unity3D Shader计划】一间 创建一个游戏场景 & 第一Shader写作
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...