在Android平台下。下载一个应用后,首次打开映入眼帘的便是Splash Screen,暂且不说Android的设计原则提不提倡这样的Splash Screen。先来看看一般使用Splash Screen的场景:

1,第一次安装后,简单APP的闪屏达到品牌营销的目的,复杂点的APP用来提供新手指导;

2。版本号更新。说明版本号新特性。

有人对这样的设计嗤之以鼻。有人趋之若鹜,孰好孰坏不在我们探讨之列。

1,简单的Splash Screen

这样的Splash Screen实现及其简单。经常使用来显示产品Logo或者版本号号等简单信息,我们仅仅须要想办法让WelcomeActivity运行几秒种后自己主动跳转到应用主界面就可以;

我们仅仅须要用到一个简单的方法:

//3s后,运行run方法启动主界面Activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i); //启动主Activity后销毁自身
finish();
}
}, 3000);

2,涉及复杂操作的Splash Screen

所谓复杂操作是由于往往这样的应用在进入界面之前须要进行非常多后台操作,通过Splash Screen让用户等待。一般涉及的操作有:

  • 从网络获取数据并存储到本地
  • 下载图片
  • 获取和解析JSON/XML等文件
  • 发送数据到服务端
  • 身份验证
  • 。。。。

反正一般都是相似于网路下载这样的些耗时操作,但又不得不在应用进入主界面前须要做的工作。依据应用的不同,所做的工作也不同,这里我们就以远程获取一张图片为例,我们在进入欢迎界面后,開始从远程下载一张图片,完毕后我们便进入主界面,将下载好的图片显示在主界面;

  1. 图片地址:
  2. 创建SplashScreen布局: res/layout/splash_screen.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<ImageView android:id="@+id/appImage"
android:src="@mipmap/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:text="Welcome to MS_Movie"
android:layout_marginTop="15dp"
android:textSize="30sp"
android:textColor="#00ACED"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>

布局效果

  1. 创建MainActivity布局:res/layout/activity_main.xml,仅仅用来显示从远程获取的图片
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </RelativeLayout>

4.完毕SplashScreenActivity,我们使用AsyncTask来运行获取和解析数据,通过Intent将数据传递给MainActivity,

public class SplashScreenActivity extends Activity {
private static final String url="http://www.jycoder.com/json/Image/1.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen); /*
* 简单Splash Screen的实现
* */ /*
* 3s后,运行run方法启动主界面Activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i); //启动主Activity后销毁自身
finish();
}
}, 3000);
* */ //在后台运行任务,传入url
new FetchDataTask().execute(url);
} public class FetchDataTask extends AsyncTask<String,Void,Bitmap>{ //运行前调用
@Override
protected void onPreExecute() {
super.onPreExecute();
} //运行后台任务
@Override
protected Bitmap doInBackground(String... strings) {
Bitmap bitmap=null;
try {
//通过传入的图片地址,获取图片
HttpURLConnection connection= (HttpURLConnection) (new URL(strings[0])).openConnection();
InputStream is=connection.getInputStream();
bitmap= BitmapFactory.decodeStream(is); } catch (IOException e) {
e.printStackTrace();
}
return bitmap;
} //任务完毕时调用
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result); //将获得的数据通过Intent传送给MainActivity
Intent intent=new Intent(SplashScreenActivity.this,MainActivity.class);
//注意,intent传递图片时,图片对象大小不应该超过40K
intent.putExtra("Image",result);
startActivity(intent); //启动MainActivity后销毁自身
finish();
}
}
}

5.完毕MainActivity。这里须要注意怎样接受Intent传递的对象

 public class MainActivity extends Activity {

        private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imageView= (ImageView) findViewById(R.id.image); Intent intent=getIntent(); if(intent!=null){
//注意Intent传递对象的方式
Bitmap bitmap=intent.getParcelableExtra("Image");
imageView.setImageBitmap(bitmap);
}
}
}

6.记得在Manifest.xml中增添联网权限。将SplashScreenActivity设为启动Activity

<?xml version="1.0" encoding="utf-8"?

>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.coder.splashscreen" > <uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SplashScreenActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"/>
</application> </manifest>

我第一次用我存储在远程的一张图片的时候出错了,遇到了一个非常有意思的问题:

后来发现这样的错误是由于用Intent传递图片时,大小不能超过40K,记住哦

完毕后的效果:

总结:

以上的样例都非常easy,但基本上Splash Screen的思路无非这几种。希望能对你有所帮助。

记得关注下方微信公众平台~~~O(∩_∩)O哈哈~

參考资料:How to implement Android Splash Screen


Android UI经常使用实例 怎样实现欢迎界面(Splash Screen)的更多相关文章

  1. 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面

    大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...

  2. 【Android UI设计与开发】1.引导界面(一)ViewPager介绍和简单实现

    1.ViewPager 实现效果图 2.ViewPager 实现功能 ViewPager类提供了多界面切换的新效果,新效果有如下特征: <1>当前显示一组界面中的其中一个界面: <2 ...

  3. 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面

    1.实现的效果 2.编码前的准备工作 ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自 ...

  4. iphone dev 入门实例7:How to Add Splash Screen in Your iOS App

    http://www.appcoda.com/how-to-add-splash-screen-in-your-ios-app/ What’s Splash Screen? For those who ...

  5. Android UI线程和非UI线程

    Android UI线程和非UI线程 UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这 ...

  6. Android UI系列-----时间、日期、Toasts和进度条Dialog

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  7. 十二、Android UI开发专题(转)

    http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很 ...

  8. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  9. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

随机推荐

  1. windows下 maven+selenium+testng项目搭建(七)

    Selenium2.47.1 + Maven3.3.9 + TestNG6.8.8 windows准备好以下环境 1. Jdk,环境变量配置 2. maven环境3. eclipse 开发工具 ,ec ...

  2. 代码动态改变 NGUI UILabel 的字体

    有一次因为 ttf 分成简体和繁体两个..所以就需要动态改变NGUI 中 UILabel 的字体,但是不知道 UILabel 保存字体的字段是哪个 网上搜到..在这里记录一下 using UnityE ...

  3. 创建SVN 本地服务器

    svnserve具体配置如下,主要是将 password-db 前的#号去掉,即去掉注释使其生效 passwd具体配置如下,主要是新增自己需要的账号和密码,也可以将原有的账号去掉注释使用 authz ...

  4. netsh配置Windows防火墙(advfirewall)

    有人可能会说,Windows防火墙有非常友好的用户界面,为什么要使用命令行界面来配置一个Windows防火墙?有 个人认为有一下原因(撇开有的人喜欢命令行不喜欢界面的 , o(∩_∩)o 哈哈) Fi ...

  5. 标准C程序设计七---107

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  6. 标准C程序设计七---54

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  7. java 四种方式实现字符流文件的拷贝对比

    将D:\\应用软件\\vm.exe  拷贝到C:\\vm.exe   四种方法耗费时间对比  4>2>3>1 package Copy; import java.io.Buffere ...

  8. Codeforces 895E Eyes Closed(线段树)

    题目链接  Eyes Closed 题意  两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...

  9. 洛谷—— P1342 请柬

    https://www.luogu.org/problemnew/show/1342 题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤 ...

  10. tcp异常断开的重连解决方法

    1.select超时重连 http://bbs.chinaunix.net/thread-4162149-1-1.html 2.http://bbs.csdn.net/topics/350074818 ...