文档章节

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

厚德
 厚德
发布于 2015/01/13 17:18
字数 661
阅读 36
收藏 0

转载请注明出处: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了,依然会发生重新进入的现象。





本文转载自:http://blog.csdn.net/lmj623565791/article/details/23613403

厚德
粉丝 2
博文 53
码字总数 33193
作品 0
武汉
私信 提问
如何创建启动界面Splash Screen

如何创建启动界面Splash Screen 启动界面Splash Screen在应用程序是很常用的,往往在启动界面中显示产品Logo、公司Logo或者开发者信息,如果应用程序启动时间比较长,那么启动界面就是一个很...

天下杰论
2012/11/26
1K
2
Android启动页黑屏及最优解决方案

前言 相信做过Android的朋友都知道,当一个APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页。那么这个黑屏或者白屏到底是怎么一回事呢?它的最好的解...

猴亮屏
2018/08/10
79
0
Android知识问答与分享项目实战

简介 AndroidPlus为《Android应用开发进阶》实战项目,分为Java版和Kotlin版。AndroidPlus是安卓开发者的“自留地”,为安卓开发者提供专属的技术问答和知识分享平台。在AndroidPlus上,可以...

沉默的范大叔
2018/07/21
0
0
[PHP]通过 PHP for Android 利用PHP编写Android应用教程

本文摘自 IT博客 http://www.zhangdafen.com 概述 Android 上的主要开发语言是Java,让很多PHPer觉得非常遗憾。但是自从ASE(Android Scripting Environment-Android脚本环境)诞生后,允许用...

81028386
2013/03/18
1K
0
基于pcDuino的WiFi实时视频监控智能小车——软件部分(三)

接上贴:基于pcDuino的WiFi实时视频监控智能小车——软件部分(二) 软件安装前的准备工作做好后,我们就可以具体安装软件让小车跑起来了,接下来会分别介绍PC控制端和手机控制端。 四、用P...

pc朵拉
2013/07/30
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部