zoukankan      html  css  js  c++  java
  • [android]APP启动界面——SplashActivity

    概念

    当前应用程序在启动的时候都会有一个展示自己公司LOGO和APP名字的界面。这个界面成为SplashActivity。


    布局

    <?

    xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff"> <TextView android:id="@+id/copy_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="12dip" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:text="by xxxxx 出品" android:textSize="11sp"/> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_centerInParent="true"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <ImageView android:id="@+id/jay_studio_icon" android:layout_width="110dip" android:layout_height="130dip" android:src="@drawable/ic_launcher"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/jay_studio_icon" android:src="@drawable/ic_launcher"/> </RelativeLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="6dip" android:text="appname" android:textSize="24sp"/> <TextView android:id="@+id/version_name" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="bottom" android:paddingBottom="6dip" android:textSize="14sp"/> </LinearLayout> <View android:layout_width="fill_parent" android:layout_height="1px" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:background="#dddddd"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:padding="6dip" android:text="传承历史" android:textSize="13sp"/> <ProgressBar android:id="@+id/refresh_list_footer_progressbar" android:layout_width="24dip" android:layout_height="24dip" android:layout_gravity="center"> </ProgressBar> </LinearLayout> </RelativeLayout> </RelativeLayout>


    用异步任务做数据用作初始化

    譬如检查网络。载入本地数据库等等。。


    class MyAsyncTask extends AsyncTask<Void, Void, Integer> {
    
    		@Override
    		protected Integer doInBackground(Void... arg0) {
    			int result;
    			//请求数据
    			result = loadingCache();
    			return result;
    		}
    
    		@Override
    		protected void onPostExecute(Integer result) {
    			super.onPostExecute(result);
    			//运行操作
    		}
    
    		public int loadingCache() {
    			//推断网络
    			ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    			NetworkInfo info = manager.getActiveNetworkInfo();
    			if (info == null) {
    				return OFFLINE;
    			}
    			return SUCCESS;
    		}
    	}

    增加动画

    可是在运行完。须要跳转到第二个界面,比較好的交互效果,是给Activity的切换时加入动画。
    流程:
    SplashActivity展示1秒后,跳转到下一个界面(主屏),跳转过程使用动画。

    	class MyAsyncTask extends AsyncTask<Void, Void, Integer> {
    
    		@Override
    		protected Integer doInBackground(Void... arg0) {
    			int result;
    			result = loadingCache();
    			long startTime = System.currentTimeMillis();
    			long loadingTime = System.currentTimeMillis() - startTime;
    			if (loadingTime < SHOW_TIME_MIN) {
    				try {
    					Thread.sleep(SHOW_TIME_MIN - loadingTime);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    			return result;
    		}
    
    		@Override
    		protected void onPostExecute(Integer result) {
    			super.onPostExecute(result);
    			Intent intent = new Intent(SplashActivity.this, NextActivity.class);
    			startActivity(intent);
    			finish();
    			overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    		}
    
    		public int loadingCache() {
    			
    			ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    			NetworkInfo info = manager.getActiveNetworkInfo();
    			if (info == null) {
    				return OFFLINE;
    			}
    			return SUCCESS;
    		}
    	}

    初始化SplashActivity


    	private static final int FAILURE = 0; // 失败
    	private static final int SUCCESS = 1; // 成功
    	private static final int OFFLINE = 2; // 假设支持离线阅读,进入离线模式
    	private static final int SHOW_TIME_MIN = 2000;
    	
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		new MyAsyncTask().execute();
    	}





    跳转动画


    进入

    <?

    xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <alpha android:fromAlpha="0" android:toAlpha="1" android:duration="2000" /> </set>



    离开

    <?xml version="1.0" encoding="utf-8"?> 
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false"> 
        <alpha 
            android:fromAlpha="1"
            android:toAlpha="0"
            android:duration="2000" /> 
    </set>

    结论:

    因为Application的生命周期比Activity长,利用这个特点。把一些载入数据库。复制数据库文件,读取数据库。而网络数据能够放在异步任务里来完毕。




    效果:


  • 相关阅读:
    Bzoj 3173: [Tjoi2013]最长上升子序列 平衡树,Treap,二分,树的序遍历
    Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈
    Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
    Bzoj 1674: [Usaco2005]Part Acquisition dijkstra,堆
    Bzoj 3110: [Zjoi2013]K大数查询 树套树
    Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
    面试题24:二叉排序树的后序遍历序列
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    面试题21:包含min函数的栈
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5097820.html
Copyright © 2011-2022 走看看