国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android筆記之:App應用之啟動界面SplashActivity的使用

Android筆記之:App應用之啟動界面SplashActivity的使用

2021-01-13 15:39Android開發網 Android

當前比較成熟一點的應用基本上都會在進入應用之顯示一個啟動界面.這個啟動界面或簡單,或復雜,或簡陋,或華麗,用意不同,風格也不同

當前比較成熟一點的應用基本上都會在進入應用之顯示一個啟動界面.
這個啟動界面或簡單,或復雜,或簡陋,或華麗,用意不同,風格也不同.
下面來觀摩幾個流行的應用的啟動界面.

1. 貨比三家
以騰訊qq,新浪weibo,uc瀏覽器,游戲神廟逃亡等7個應用為例,比比看:
Android筆記之:App應用之啟動界面SplashActivity的使用
(我認為最精美的界面應該是qq2012,雖然只有一張圖,基本的應用名稱,版本,圖標這些信息都有,但是看著舒服,覺得美.)

2. 元素
啟動界面的本意是以友好用戶界面來掩飾后臺緩沖加載,讓用戶用平和等待的心情進入正常應用界面.
但是因為啟動界面是放在開始,在這個特殊的點上,可以做更多的事情,如應用宣傳,顯示版權,展示廣告等等.
所以,這個啟動界面的元素,可多可少,就看你的用意和需求.
下面我把一些常見的元素羅列出來:
(1). 應用名稱
(2). 應用版本
(3). 應用圖標
(4). 版權
(5). 一句話描述
(6). 進度條
(7). 額外信息,如市場專版,獨家首發等
... ...

3. 優點
啟動界面綜合考慮,至少有這些優點可以利用:
(1). 友好的等待界面,這是最基本的
(2). 應用的基本說明,宣傳介紹
(3). 動態的廣告,全屏廣告
(4). 應用的屬性說明如版本,版權等信息,知曉用戶當前應用的基本屬性
從技術的角度細看,還有如下:
(5). 加載耗時資源
(6). 檢查新版本
(7). 預設條件
(8). 代碼分離
... ...

4. 布局
把能加的元素都加進去,做一個無設計的啟動界面,布局如下:

復制代碼 代碼如下:

<?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/app_jay"/>
                <imageview
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_torightof="@id/jay_studio_icon"
                    android:src="@drawable/icon"/>
            </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="@string/app_name"
                    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="@string/setting_about_description"
                android:textsize="13sp"/>
            <progressbar android:id="@+id/refresh_list_footer_progressbar"
                android:layout_width="24dip"
                android:layout_height="24dip"
                android:indeterminatedrawable="@anim/app_refresh_progress"
                android:layout_gravity="center">
            </progressbar>
        </linearlayout>
    </relativelayout>
</relativelayout>


這個布局僅表示意,效果如下:
Android筆記之:App應用之啟動界面SplashActivity的使用

 

5. 代碼分離
專門拿這一點出來強調,是為了增強寫程序的代碼分離意識,減少雜糅.
比如說檢查新版本這個操作,
如果放在主界面中,就容易把本來是一個獨立的操作和加載數據的操作混在一起,增加了主界面代碼的復雜度,
如果放啟動界面中,就會顯得更干凈更清晰的在啟動模塊中檢測(因為檢測新版本本來就是應該在應用啟動的時候執行),而且還可以考慮是否允許用戶進入主界面(當你決定完全放棄老版本的時候,有時需要強制用戶升級到新版本)。
其他的一些操作,通過如此考慮,也可能會優化到代碼結構。

6. 異步執行任務
在啟動界面友好展示的同時,后臺可以做很多操作,這些后臺操作可以使用asynctask來最簡單的實現。
其他的方法也可以,但是我覺得這時候asynctask最簡潔了,這個時候不用asynctask什么時候用asynctask。

復制代碼 代碼如下:

public class splashactivity extends baseactivity {

    private static final int failure = 0; // 失敗
    private static final int success = 1; // 成功
    private static final int offline = 2; // 如果支持離線閱讀,進入離線模式

    private textview mversionnametext;

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.splash);

        mversionnametext = (textview) findviewbyid(r.id.version_name);
        mversionnametext.settext(baseapplication.mversionname);

        ... ...
        new asynctask<void, void, integer>() {

            @override
            protected integer doinbackground(void... params) {
                int result;
                ... ...
                result = loadingcache();
                ... ...
                return result;
            }

            @override
            protected void onpostexecute(integer result) {

            };
        }.execute(new void[]{});
    }

    private int loadingcache() {
        if (baseapplication.mnetworkstate == networkutils.networn_none) {
            return offline;
        }
        ... ...
        return success;
    }

}


把后臺的操作全部放到doinbackground方法中去,最后返回三種狀態,作為后臺執行的結果.

 

7. 跳轉動畫
在onpostexecute方法中,我們一定會最終要跳轉到另外一個activity,并且把自己finish掉的。
這個跳轉的動畫,在我的手機默認是左右滑進滑出的,其實這個動畫是可以自定義的,比如使用淡入淡出的跳轉動畫。
首先,定義淡入淡出的兩個動畫fade_in.xml和fade_out.xml放到res/anim文件夾中:

復制代碼 代碼如下:

<!--fade_in.xml-->
<?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="500" />
</set>

<!--fade_out.xml-->
<?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="500" />
</set>


然后,在finish之后調用overridependingtransition方法使用上面的動畫文件:

復制代碼 代碼如下:

@override
protected void onpostexecute(integer result) {
    // ... ...
    intent intent = new intent();
    intent.setclassname(splashactivity.this, getstring(r.string.splash_out_activity));
    startactivity(intent);
    finish();
    //兩個參數分別表示進入的動畫,退出的動畫
    overridependingtransition(r.anim.fade_in, r.anim.fade_out);
};


8. 最短顯示時間
在實際工作中,發現一個小問題,有可能這個后臺操作用時很短,這樣直接跳轉的話,太快導致有一種閃一下的感覺,所以我們需要定義一個最短顯示時間,取值800ms.

復制代碼 代碼如下:

private static final int show_time_min = 800;
// ... ...
{
        @override
        protected integer doinbackground(void... params) {
            int result;
            long starttime = system.currenttimemillis();
            result = loadingcache();
            long loadingtime = system.currenttimemillis() - starttime;
            if (loadingtime < show_time_min) {
                try {
                    thread.sleep(show_time_min - loadingtime);
                } catch (interruptedexception e) {
                    e.printstacktrace();
                }
            }
            return result;
        }
}


這樣跳轉的時候,就永遠不會有閃的感覺,但是800ms又是很短的一個時間,不會對用戶體驗造成干擾.

 

9. 小結
啟動界面是一個比較簡單的話題,針對一些碰到的問題,本文做了一個小小的整理,以作記錄.

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区三区在线 | 亚洲 欧美 另类 综合 偷拍 | 午夜精品成人一区二区 | 国产一级毛片一级 | 日韩精品在线一区 | 一区二区三区在线免费播放 | 免费一区二区 | 亚洲成人免费 | 爱干视频| 国产在线观看一区二区三区 | 亚洲性人人天天夜夜摸 | 欧美视频在线一区 | 免费福利网站 | 在线观看中文字幕 | 久久精选 | 亚洲成人在线播放视频 | 日韩欧美一区二区三区久久婷婷 | 欧美亚洲国产一区 | 性吧在线 | 99热激情| www.欧美视频 | 五月天导航 | 中文字幕一区二区三区在线视频 | 人人99| 国产精品美女久久久久久久网站 | 最新免费av网站 | 国产视频一区在线 | 成人在线免费看视频 | 欧美一级在线 | 九九综合九九 | 国产精品久久久久久吹潮 | 国产在线第一页 | 操操操小说 | 秒播av | 亚洲国产精品久久久久婷婷老年 | 日韩精品专区在线影院重磅 | 欧洲精品久久久 | 国产在线拍揄自揄拍视频 | 亚洲精品国产成人 | 国产成人综合网 | 日本欧美久久久久免费播放网 |