如何实现Android应用的启动画面(闪屏)?
2015-11-03 18:02
405 查看
Android的启动画面通常用来显示用户的某种形式的进度,在应用程序加载完全之前。有些人使用应用程序的启动动画,只是为了在几秒钟内显示其程序应用和公司的LOGO。不幸的是,和IOS相比,在Android中,我们没有任何内在的机制来显示启动画面。在本教程中,我们将学习如何实现Android应用程序的闪屏。
启动画面的应用场景
启动画面的目的,取决于应用程序的要求。在本教程中,我将讲解实现闪屏的两种实现场景。第一个是使用Timer来显示启动画面,第二个是在进行网络HTTP调用这需要一些时间来获取所需的信息时显示启动画面。这两个教程都是一样的,除了闪屏活动。为了实现闪屏,我们要创建一个单独Activity,一旦这个Activity关闭,我们就启动我们的主Activity.所以首先让我们创建一个新的项目.
2)打开你的AndroidManifest.xml文件,让SplashScreen Activity作为启动的Activity.
4)在SplashScreen.Java Activity中添加以下代码,在下面的代码中Handler被用于等待特定的时间,一旦timer时间用完,我们就启动主Activity.
5)启动这个程序,你将会看到3s的闪屏,而且之后你的主Activity也会被启动.
接下来是第二个场景,我们的应用程序在进入主Activity之前会进行一些网络请求.在这里所有的步骤都与之前相同,除了SplashScreen.Java的代码.在SplashScreen.Java的onCreat()方法中我将使用Asynctask方法请求网络获取需要的信息.一旦网络请求终止,就在onPostExecute()方法中启动主Activity.
2)在AndroidManifest.xml文件中添加 INTERNET 权限.
3)在SplashScreen.Java中添加AsyncTask方法请求网络.在本教程中将通过HTTP调用来获取JSON并用log形式显示在屏幕.获取Json数据之后通过Intent传值到MainActivity中.
启动画面的应用场景
启动画面的目的,取决于应用程序的要求。在本教程中,我将讲解实现闪屏的两种实现场景。第一个是使用Timer来显示启动画面,第二个是在进行网络HTTP调用这需要一些时间来获取所需的信息时显示启动画面。这两个教程都是一样的,除了闪屏活动。为了实现闪屏,我们要创建一个单独Activity,一旦这个Activity关闭,我们就启动我们的主Activity.所以首先让我们创建一个新的项目.
1.使用Timer的Android启动画面
1)首先为启动画面创建一个单独的Activity,在新建的项目里新建一个类,命名为SplashScreen.Java.2)打开你的AndroidManifest.xml文件,让SplashScreen Activity作为启动的Activity.
<!-- Splash screen --> <activity android:name="com.androidsplashscreentimer.SplashScreen" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- Main activity --> <activity android:name="com.androidsplashscreentimer.MainActivity" android:label="@string/app_name" > </activity>3)为SplashScreen在res目录下创建一个layout文件,命名为activity_splash.xml,这个Layout只包含你的应用LOGO和公司LOGO.
activity_splash.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/gradient_background" > <ImageView android:id="@+id/imgLogo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/wwe_logo" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:textSize="12dp" android:textColor="#454545" android:gravity="center_horizontal" android:layout_alignParentBottom="true" /> </RelativeLayout>
4)在SplashScreen.Java Activity中添加以下代码,在下面的代码中Handler被用于等待特定的时间,一旦timer时间用完,我们就启动主Activity.
SplashScreen.java package com.androidsplashscreentimer; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; public class SplashScreen extends Activity { // Splash screen timer private static int SPLASH_TIME_OUT = 3000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); new Handler().postDelayed(new Runnable() { /* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / company */ @Override public void run() { // This method will be executed once the timer is over // Start your app main activity Intent i = new Intent(SplashScreen.this, MainActivity.class); startActivity(i); // close this activity finish(); } }, SPLASH_TIME_OUT); } }
5)启动这个程序,你将会看到3s的闪屏,而且之后你的主Activity也会被启动.
接下来是第二个场景,我们的应用程序在进入主Activity之前会进行一些网络请求.在这里所有的步骤都与之前相同,除了SplashScreen.Java的代码.在SplashScreen.Java的onCreat()方法中我将使用Asynctask方法请求网络获取需要的信息.一旦网络请求终止,就在onPostExecute()方法中启动主Activity.
2.进行网络请求时的Android闪屏
1)依照上面的步骤创建SplashScreen.Java类.2)在AndroidManifest.xml文件中添加 INTERNET 权限.
<span style="white-space:pre"> </span><uses-permission android:name="android.permission.INTERNET"/>
3)在SplashScreen.Java中添加AsyncTask方法请求网络.在本教程中将通过HTTP调用来获取JSON并用log形式显示在屏幕.获取Json数据之后通过Intent传值到MainActivity中.
SplashScreen.java package info.androidhive.androidsplashscreentimer; import info.androidhive.androidsplashscreennetwork.R; import info.androidhive.network.JsonParser; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; public class SplashScreen extends Activity { String now_playing, earned; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); /** * Showing splashscreen while making network calls to download necessary * data before launching the app Will use AsyncTask to make http call */ new PrefetchData().execute(); } /** * Async Task to make http call */ private class PrefetchData extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); // before making http calls } @Override protected Void doInBackground(Void... arg0) { /* * Will make http call here This call will download required data * before launching the app * example: * 1. Downloading and storing in SQLite * 2. Downloading images * 3. Fetching and parsing the xml / json * 4. Sending device information to server * 5. etc., */ JsonParser jsonParser = new JsonParser(); String json = jsonParser .getJSONFromUrl("http://api.androidhive.info/game/game_stats.json"); Log.e("Response: ", "> " + json); if (json != null) { try { JSONObject jObj = new JSONObject(json) .getJSONObject("game_stat"); now_playing = jObj.getString("now_playing"); earned = jObj.getString("earned"); Log.e("JSON", "> " + now_playing + earned); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); // After completing http call // will close this activity and lauch main activity Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("now_playing", now_playing); i.putExtra("earned", earned); startActivity(i); // close this activity finish(); } } }
MainActivity.java package com.androidsplashscreentimer; import com.androidsplashscreennetwork.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity { LinearLayout llStats; TextView txtPlayCount, txtEarned; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); llStats = (LinearLayout) findViewById(R.id.llStats); txtPlayCount = (TextView) findViewById(R.id.txtNowPlaying); txtEarned = (TextView) findViewById(R.id.txtEarned); // layout background transparent llStats.getBackground().setAlpha(150); llStats.setVisibility(View.VISIBLE); Intent i = getIntent(); String now_playing = i.getStringExtra("now_playing"); String earned = i.getStringExtra("earned"); // Diplaying the text txtPlayCount.setText(now_playing); txtEarned.setText(earned); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories