• android程序启动画面之Splash总结[转]


    方法一:

    很多应用都会有一个启动界面。欢迎画面慢慢隐现,然后慢慢消隐。实现这种效果的方法有两种(暂时只发现两种)
    1、使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一张Activity。
    2、使用一个Activity,可以用到View.gone() 这个方法。把Acitivity的某些元素移除。

    1、两个Activity:
    首先是AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sunshine.splash" 
          android:versionCode="1" 
          android:versionName="1.0"&gt; 
        <application android:icon="@drawable/icon" android:label="@string/app_name"> 
            <activity android:name=".Splash" 
                      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="Main">
        </activity> 
    </application> 
        <uses-sdk android:minSdkVersion="3" /> 
    </manifest>

     

    然后是JAVA代码:

    package net.hlovey.splash; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.os.Handler; 
      
    public class Splash extends Activity {    
      
        private final int SPLASH_DISPLAY_LENGHT = 3000; //延迟三秒  
      
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.splash); 
            new Handler().postDelayed(new Runnable(){ 
      
             @Override 
             public void run() { 
                 Intent mainIntent = new Intent(Splash.this,Main.class); 
                 Splash.this.startActivity(mainIntent); 
                     Splash.this.finish(); 
             } 
                
            }, SPLASH_DISPLAY_LENGHT); 
        } 
    }

    当然可以再Splash中加入动画效果。(我觉得先要布局好AndroidManifest.xml。因为那才是工程的索引文件。首先在那要有一个统筹!而不是先写java code。然后逐步往xml中增加 ,这说明对整个项目没有一个统筹的设计)

     

    方法二:

    androidmanifest.xml就不多说了。先看布局代码:

    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android
     android:orientation=”vertical”
     android:layout_width=”fill_parent”
     android:layout_height=”fill_parent”>   
         <LinearLayout android:id=”@+id/splashscreen” android:orientation=”vertical”
              android:layout_width=”fill_parent” android:layout_height=”fill_parent”>
              <ImageView  android:layout_width=”wrap_content”
                   android:layout_height=”wrap_content” android:src=”@drawable/splash”
                   android:layout_gravity=”center”
                   android:layout_marginTop=”130px”/>
              <TextView
                   android:id=”@+id/info”
                   android:layout_width=”fill_parent”
                   android:layout_height=”wrap_content”
                   android:gravity=”center”
                   android:paddingTop=”10px”
                   android:text=”This is a splash!!”/>
         </LinearLayout>     
     <WebView android:id=”@+id/browser”
      android:layout_width=”fill_parent”
      android:layout_height=”fill_parent” android:layout_weight=”1″/>
    </LinearLayout>

     

    有一个id为splashscreen 的linearlayout,是程序启动时显现的部分。id为browser是程序的主界面显示部分。

    package net.hlovey.s; 
    import android.app.Activity; 
    import android.app.AlertDialog; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.os.Message; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.animation.Animation; 
    import android.view.animation.AnimationUtils; 
    import android.widget.LinearLayout; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    public class WebGameActivity extends Activity { 
      
      private WebView webView;  
        
      private Handler mHandler = new Handler(); 
      
      private static final String TAG = "WebGameActivity";   
      //菜单 
      private static final int MENU_RELOAD = Menu.FIRST; 
      private static final int MENU_HELP = Menu.FIRST + 1; 
      private static final int MENU_ABOUT = Menu.FIRST + 2; 
      private static final int MENU_CLOSE = Menu.FIRST + 3;   
      private int staus  = 0;  
       
      private static final int  STOPSPLASH = 0; 
      //time in milliseconds 
      private static final long SPLASHTIME = 1000; 
       
      private LinearLayout splash; 
      private TextView tv; 
      
      private Animation myAnimation_Alpha; 
      private Animation animatinoGone ; 
      
      private Handler splashHandler = new Handler() { 
        public void handleMessage(Message msg) { 
             switch (msg.what) { 
             case STOPSPLASH: 
                  if( staus == 1 ){                
                    splash.startAnimation(animatinoGone); 
                    splash.setVisibility(View.GONE); 
                    break; 
                  } 
                  sendEmptyMessageDelayed(STOPSPLASH, SPLASHTIME); 
             } 
             super.handleMessage(msg); 
        } 
    }; 
      
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        getWindow().requestFeature(Window.FEATURE_PROGRESS); //去标题栏 
        setContentView(R.layout.main);    
        animatinoGone = AnimationUtils.loadAnimation(this,R.anim.alpha_gone); //动画效果 
        myAnimation_Alpha = AnimationUtils.loadAnimation(this,R.anim.alpha_action); //动画效果 
        
        splash = (LinearLayout) findViewById(R.id.splashscreen); 
        tv = (TextView) findViewById(R.id.info); 
        tv.setText("正在建立数据连接"); 
        splash.startAnimation(myAnimation_Alpha); 
        
        Message msg = new Message(); 
        msg.what = STOPSPLASH; 
        splashHandler.sendMessageDelayed(msg, SPLASHTIME); 
      
    }

     

     

     

    ------------------------------------------------------------------------------------------

    每个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO、公司的LOGO或者开发者信息。如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。

      • 制作Splash界面
        突出产品LOGO,产品名称,产品主要特色;
        注明产品的版本信息;
        注明公司信息或者开发者信息;
        背景图片,亦可以用背景颜色代替;

      • 除了等待还能做点什么
        大多数的Splash界面都是会等待一定时间,然后切换到下一个界面;
        其实,在这段时间里,可以对系统状况进行检测,比如网络是否通,电源是否充足;
        或者,预先加载相关数据;
        为了能让启动界面展现时间固定,需要计算执行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间

      • 源码示例(以Wordpress的Android客户端为例)
        AndroidMenifest.xml
        复制代码
        <activity android:icon="@drawable/app_icon"
        android:screenOrientation
        ="portrait"
        android:name
        =".splashScreen"
        android:theme
        ="@android:style/Theme.NoTitleBar">
        <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        </activity>
        复制代码
        splashScreen.java
        复制代码
        package org.wordpress.android;

        import android.app.Activity;
        import android.content.Intent;
        import android.content.pm.PackageInfo;
        import android.content.pm.PackageManager;
        import android.content.pm.PackageManager.NameNotFoundException;
        import android.graphics.PixelFormat;
        import android.os.Bundle;
        import android.os.Handler;
        import android.view.WindowManager;
        import android.widget.TextView;


        publicclass splashScreen extends Activity {
        /**
        * Called when the activity is first created.
        */

        @Override
        publicvoid onCreate(Bundle icicle) {
        super.onCreate(icicle);
        getWindow().setFormat(PixelFormat.RGBA_8888);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

        setContentView(R.layout.splashscreen);

        //Display the current version number
        PackageManager pm = getPackageManager();
        try {
        PackageInfo pi
        = pm.getPackageInfo("org.wordpress.android", 0);
        TextView versionNumber
        = (TextView) findViewById(R.id.versionNumber);
        versionNumber.setText(
        "Version "+ pi.versionName);
        }
        catch (NameNotFoundException e) {
        e.printStackTrace();
        }

        new Handler().postDelayed(new Runnable() {
        publicvoid run() {
        /* Create an Intent that will start the Main WordPress Activity. */
        Intent mainIntent
        =new Intent(splashScreen.this, wpAndroid.class);
        splashScreen.
        this.startActivity(mainIntent);
        splashScreen.
        this.finish();
        }
        },
        2900); //2900 for release

        }
        }
        复制代码
        splashscreen.xml
        复制代码
        <!--
        android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。
        android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置
        -->
        <LinearLayout android:id="@+id/LinearLayout01"
        android:layout_width
        ="fill_parent"
        android:layout_height
        ="fill_parent"
        xmlns:android
        ="http://schemas.android.com/apk/res/android"
        android:gravity
        ="center|center"
        android:background
        ="@drawable/home_gradient"
        android:orientation
        ="vertical">
        <!--
        android:scaleType是控制图片如何resized/moved来匹对ImageView的size
        CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
        -->
        <ImageView android:layout_marginTop="-60dip"
        android:paddingLeft
        ="20dip"
        android:paddingRight
        ="20dip"
        android:scaleType
        ="centerInside"
        android:layout_width
        ="wrap_content"
        android:layout_height
        ="wrap_content"
        android:id
        ="@+id/wordpress_logo"
        android:src
        ="@drawable/wordpress_home">
        </ImageView>
        <!--
        android:typeface 字体风格
        -->
        <TextView android:text="@+id/TextView01"
        android:layout_width
        ="wrap_content"
        android:layout_height
        ="wrap_content"
        android:layout_marginTop
        ="20dip"
        android:typeface
        ="serif"
        android:shadowDx
        ="0"
        android:shadowDy
        ="2"
        android:shadowRadius
        ="1"
        android:shadowColor
        ="#FFFFFF"
        android:textColor
        ="#444444"
        android:textSize
        ="20dip"
        android:id
        ="@+id/versionNumber"
        android:gravity
        ="bottom">
        </TextView>
        </LinearLayout>
        复制代码
  • 相关阅读:
    Java Servlet 入门: 旧版本Eclipse配置兼容新版本Tomcat。
    Java Servlet 入门: 问题系列:Filter中通过HttpServletRequest.getParts()获取不到上传文件。
    开源:Taurus.MVCJava 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)
    Java Servlet 入门: 问题系列:Filter request.getRequestDispatcher(url).forward(...,...)映射请求后404。
    Java Servlet 入门: Eclipse运行Web程序:去掉Url中的开头的项目名称。
    RabbitMQ 入门系列:6、保障消息:不丢失:发送方、Rabbit存储端、接收方。
    Taurus.MVCJava 版本打包上传到Maven中央仓库(详细过程):4、Maven项目转换与pom.xml配置
    Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。
    Java Servlet 入门: 重复注解的使用。
    Java Servlet 入门: 问题系列:警告: Web应用程序[ROOT]似乎启动了一个名为[Thread1]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪
  • 原文地址:https://www.cnblogs.com/fx2008/p/3140080.html
Copyright © 2020-2023  润新知