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 ...
随机推荐
- OCP读书笔记(10) - 使用闪回技术I
使用闪回技术查询数据 闪回查询:就是查询表在过去某个时间点的数据,所用到的技术就是undo数据 SQL> conn scott/tiger 创建测试表 SQL> create table ...
- Javascript新手集中营
javascript是世界上最流行的编程语言,也许没有之一,看看github,stackoverflow上面的开源项目和问答就可略知一二.它可以用来开发web app.服务器.或者联合nati ...
- Android开发 - ActivityLifecycleCallbacks用法初探
ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用Activity ...
- java泛型 之 入门(interface)
一:泛型简单介绍: (1)所谓泛型,就是变量类型的參数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能. ...
- STL之Vector(不定长数组)
vector是同一种对象的集合,每一个对象都有一个相应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. 引入头文件 #include<vector> 1.vec ...
- 【PLSQL】绑定变量,活跃SQL,软硬解析解析
************************************************************************ ****原文:blog.csdn.net/clar ...
- Mongodb数据备份恢复
Mongodb数据备份恢复 一.MongoDB数据库导入导出操作 1.导出数据库 twangback为备份的文件夹 命令: mongodump -h 127.0.0.1[服务器IP] -d advie ...
- 再探vim经常使用命令
最開始学习过vim,见 http://blog.csdn.net/u011848617/article/details/12837873 之后以前不了了之,当再次学习后,发现经常使用命令的掌握还 ...
- 两个实验操作系统-ubuntu在安装配置pintos
安前两次莫名其妙, 蛋疼的实验操作系统.. 首先下错了总结第一次. 使用最后gdb调试pintos什么时候, 这个错误将被报告: bochsrc.txt:8: Bochs is not compile ...
- TCP header
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vzc2VyNDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...