[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长,利用这个特点,把一些加载数据库,复制数据库文件,读取数据库。而网络数据可以放在异步任务里来完成。



效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值