主要实现效果:
--------------
程序启动,进入loading界面,
loading界面显示背景图 及 进度条动画,
后台启动线程进行相应的初始化操作,
loading界面更新相应的初始化提示信息,
初始化完成,打开并进入主界面,关闭loading界面,
如果初始化超时,则弹出提示,退出程序。
loading.java
------------
package com.hello; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; import android.widget.TextView; import android.widget.Toast; public class loading extends Activity { int MSG_INIT_OK = 1; int MSG_INIT_INFO = 2; int MSG_INIT_TIMEOUT = 9; boolean isTimeout = false; TextView tvInfo ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.loading); tvInfo = (TextView)findViewById(R.id.tvInfo); initSystem(); } private void initSystem(){ initThread(); mHandler.postDelayed(timeOutTask,60000);//60秒超时 } public Handler mHandler = new Handler(){ public void handleMessage(Message msg){ if(msg.what == MSG_INIT_TIMEOUT){ if (mHandler != null && timeOutTask != null ){ mHandler.removeCallbacks(timeOutTask); } Toast.makeText(loading.this, "timeout", Toast.LENGTH_LONG).show(); loading.this.finish(); }else if(msg.what == MSG_INIT_OK){ if (mHandler != null && timeOutTask != null ){ mHandler.removeCallbacks(timeOutTask); } startActivity(new Intent(getApplication(),MainActivity.class)); loading.this.finish(); }else if(msg.what == MSG_INIT_INFO){ String info = msg.obj.toString(); tvInfo.setText(info); } } }; Runnable timeOutTask = new Runnable() { public void run() { isTimeout = true; Message msg = Message.obtain(); msg.what = MSG_INIT_TIMEOUT; mHandler.sendMessage(msg); } }; private void initThread(){ new Thread(){ public void run() { try { if(!isTimeout){ sendInitInfo("初始化 step 1"); Thread.sleep(1000);//TODO 1 } if(!isTimeout){ sendInitInfo("初始化 step 2"); Thread.sleep(2000);//TODO 2 } if(!isTimeout){ sendInitInfo("初始化 step 3"); Thread.sleep(3000);//TODO 2 } if(!isTimeout){ //初始化完成 sendInitInfo("初始化完成"); Message msg2 = Message.obtain(); msg2.what = MSG_INIT_OK; mHandler.sendMessage(msg2); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } private void sendInitInfo(String info){ Message msg1 = Message.obtain(); msg1.what = MSG_INIT_INFO; msg1.obj = info; mHandler.sendMessage(msg1); } }
res/layout/loading.xml
----------------------
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/pf_loading_bg" android:orientation="horizontal"> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TableRow> <ProgressBar android:id="@+id/progressBar1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="10dip" android:paddingLeft="70dip" android:paddingRight="70dip" style="@style/loading"> </ProgressBar> </TableRow> <TableRow> <TextView android:text="TextView" android:layout_height="wrap_content" android:id="@+id/tvInfo" android:layout_width="wrap_content"></TextView> </TableRow> </TableLayout> </LinearLayout>
res/values/mystyle.xml
----------------------
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="loading" parent="@android:style/Widget.ProgressBar.Large"> <item name="android:indeterminateDrawable">@anim/loading</item> </style> </resources>
res/anim/loading.xml
--------------------
<?xml version="1.0" encoding="utf-8"?> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android" > <item android:duration="100" android:drawable="@drawable/loading1" /> <item android:duration="100" android:drawable="@drawable/loading2" /> <item android:duration="100" android:drawable="@drawable/loading3" /> </animation-list>
res/drawable-hdpi/
-------------------
loading_bg.png ,
loading1.png , loading2.png ,loading3.png
AndroidMainfest.xml
-------------------
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hello" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> </activity> <activity android:name=".loading"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>