转载请注明出处: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了,依然会发生重新进入的现象。
分享到:
相关推荐
3. **设置过渡**:为了实现从闪屏界面到主界面的平滑过渡,我们需要在SplashActivity的Java代码中添加定时器或者监听应用初始化的回调。当应用准备好后,启动主Activity并关闭闪屏界面。 ```java public class ...
在`onCreate()`方法中进行初始化工作,在`onStart()`和`onResume()`中显示Splash界面。 2. **动画效果**: - "AdvancedSplashDemo"可能包含了一些动画效果,如渐变、平移、旋转等,这些可以通过`ObjectAnimator`、...
5. 设置延时:为了避免用户在Splash界面停留时间过短,可以设置一个合理的延时,确保所有任务完成后再进入主界面。 6. 监听任务状态:确保异步任务完成后关闭Splash界面,防止界面卡死。 四、注意事项 1. 避免内存...
因此,合理控制Splash界面的显示时间,尽快过渡到主应用界面是很重要的。 2. **后台任务处理**:若需要在Splash界面进行大量初始化工作,建议使用异步加载,避免阻塞UI线程,保持界面流畅。 3. **版本更新策略**:...
在Android应用开发中,"Splash Screen"或"启动页"是一种常见的设计元素,它在应用程序启动时短暂显示,通常用来展示品牌标识、加载资源或执行初始化操作。在本项目"Splash_android_"中,我们将深入探讨如何实现这样...
3. 使用过渡动画:通过动画效果平滑地从Splash界面过渡到主界面,提供更好的用户体验。 总结,Splash启动界面是提升应用首屏展示效果的重要手段。通过合理的设计、编程以及优化,可以使其在展示品牌形象的同时,为...
// 启动计时器,3秒后跳转到主界面 new Handler().PostDelayed(async () => { await Task.Delay(SPLASH_TIME_OUT); StartActivity(typeof(MainActivity)); }, SPLASH_TIME_OUT); } } } ``` 2. **设计Splash...
之后的启动,系统会通过检查SharedPreference中的值来决定是否跳过欢迎界面,直接进入主应用界面。 总的来说,这个"android欢迎界面及导航界面的Demo"涵盖了Android应用开发中的两个核心组件,提供了用户体验的良好...
Splash Screen是最传统的引导页形式,它通常是一个简单的全屏背景和应用程序的图标,展示几秒钟后自动跳转到主界面。实现Splash Screen的关键在于设置一个定时器,控制展示时间并跳转到下一个Activity。优点是简单...
本教程将详细讲解如何利用Android Studio进行首界面和滑动界面的源码实现,使用户在左右滑动后能够顺利进入主界面。 首先,我们从“欢迎界面”开始。欢迎界面通常用来展示应用的品牌、特性或引导用户进行初次操作。...
【标题】"手机安全卫士02——splash界面"涉及的是Android应用开发中启动界面(Splash Screen)的设计与实现。启动界面通常是一个应用程序在主功能界面加载前展示的简单画面,用于加载应用资源、初始化设置或者展示...
当动画结束时,触发进入主界面的操作。 ```java public class SplashView extends View { private AnimationDrawable splashAnimation; public SplashView(Context context) { super(context); init(); } ...
本源码提供了一种实现全屏欢迎界面的方法,且支持自定义持续时间,使用户体验更加个性化。下面我们将深入探讨Android全屏欢迎界面的实现原理和关键知识点。 1. **布局设计** - 全屏欢迎界面通常由一个全屏背景图和...
5. 跳转逻辑:当用户完成浏览引导界面后,需要跳转到主界面。可以监听ViewPager的滑动事件,或者设置一个“开始/跳过”按钮,点击后关闭引导界面并进入应用。 三、AndyViewPager详解 "AndyViewPager"可能是一个...
在Android应用开发中,启动界面(Splash Screen)和导航界面(Navigation Interface)是用户体验的重要组成部分。启动界面通常用于展示品牌标识、加载应用资源以及执行初始化操作,而导航界面则负责提供用户在应用...
很多Android程序在启动时首先会显示一个封面(Splash窗口),过一会才进入主界面。Splash窗口通常是全屏的,一般会显示与程序相关的logo、公司标识等.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分...
在本例中,我们创建的Splash界面将停留6秒后自动进入应用主界面。 接着,我们深入到`布局`的概念。在Android开发中,布局文件定义了用户界面的结构,包括组件的位置和样式。有多种类型的布局,如`LinearLayout`和`...
4. 考虑优化:对于返回用户,可以考虑不显示引导界面,直接进入主应用。这可以通过SharedPreferences存储用户是否已查看引导界面的状态来实现。 ```java SharedPreferences pref = getSharedPreferences("MyPref", ...
在Android开发中,Splash界面(启动页)是一个常见的设计,用于展示应用的标志或加载必要的数据。然而,用户在打开应用时可能会遇到白屏或黑屏的现象,这通常是由于Activity的启动过程和主题设置不当导致的。本文将...