android loading界面 及 处理

主要实现效果:
--------------
程序启动,进入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>


 

 

 

posted on 2012-04-13 23:15  freeliver54  阅读(18220)  评论(2编辑  收藏  举报

导航