android loading界面 及 处理

简介:

http://www.cnblogs.com/freeliver54/archive/2012/04/13/2446503.html


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

相关文章
|
5月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
|
5月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
225 65
Android自定义view之网易云推荐歌单界面
|
5月前
|
Android开发 开发者
Android企业级实战-界面篇-3
本文是《Android企业级实战-界面篇》系列的第三篇,主要介绍分割线和条形跳转框的实现方法,二者常用于设置和个人中心界面。文章通过具体代码示例展示了如何实现这两种UI组件,并提供了效果图。实现前需准备`dimens.xml`、`ids.xml`、`colors.xml`等文件,部分资源可参考系列第一、二篇文章。代码中详细说明了布局文件的配置,如分割线的样式定义和条形跳转框的组件组合,帮助开发者快速上手并应用于实际项目中。
|
5月前
|
XML Android开发 数据格式
Android企业级实战-界面篇-2
本文为《Android企业级实战-界面篇》系列第二篇,主要介绍三个UI模块的实现:用户资料模块、关注与粉丝统计模块以及喜欢和收藏功能模块。通过详细的XML代码展示布局设计,包括dimens、ids、colors配置文件的使用,帮助开发者快速构建美观且功能齐全的界面。文章结合实际效果图,便于理解和应用。建议配合第一篇文章内容学习,以获取完整工具类支持。
|
5月前
|
算法 Java Android开发
Android企业级实战-界面篇-1
本文详细介绍了Android企业级开发中界面实现的过程,涵盖效果展示、实现前准备及代码实现。作者通过自身经历分享了Android开发经验,并提供了`dimens.xml`、`ids.xml`、`colors.xml`和`strings.xml`等配置文件内容,帮助开发者快速构建规范化的UI布局。文章以一个具体的用户消息界面为例,展示了如何使用线性布局(LinearLayout)和相对布局(RelativeLayout)实现功能模块排列,并附带注意事项及使用方法,适合初学者和进阶开发者参考学习。
|
Android开发
定制Android关机界面
定制Android关机界面
248 0
|
12月前
|
XML 数据可视化 Android开发
Android应用界面
Android应用界面中的布局和控件使用,包括相对布局、线性布局、表格布局、帧布局、扁平化布局等,以及AdapterView及其子类如ListView的使用方法和Adapter接口的应用。
207 0
Android应用界面
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
288 1
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
499 1
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
376 0

热门文章

最新文章