可能是最優雅的切換布局的方法

dumujiang 7年前發布 | 5K 次閱讀 安卓開發 Android開發 移動開發

StateLayout用法

演示

演示圖

依賴

第一步,在項目根目錄的build.gradle加入,如果沒有,請加入

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

第二步,依賴此庫

compile 'com.github.fingdo:stateLayout:1.0.0'

使用方法

引入布局

用法與SrcollView一致,只允許一個 根布局

<com.fngdo.statelayout.StateLayout
        android:id="@+id/state_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- 內容布局 one root view -->
</com.fngdo.statelayout.StateLayout>

布局設置圖標和文字

<declare-styleable name="StateLayout">
    <!-- 錯誤提示圖標 -->
    <attr name="errorImg" format="reference" />
    <!-- 錯誤提示文字 -->
    <attr name="errorText" format="string" />
    <!-- 空數據提示圖標 -->
    <attr name="emptyImg" format="reference" />
    <!-- 空數據提示文字 -->
    <attr name="emptyText" format="string" />
    <!-- 沒有網絡提示圖標 -->
    <attr name="noNetworkImg" format="reference" />
    <!-- 沒有網絡提示文字 -->
    <attr name="noNetworkText" format="string" />
    <!-- 超時提示圖標 -->
    <attr name="timeOutImg" format="reference" />
    <!-- 超時提示文字 -->
    <attr name="timeOutText" format="string" />
    <!-- 登錄提示圖標 -->
    <attr name="loginImg" format="reference" />
    <!-- 登錄提示文字 -->
    <attr name="loginText" format="string" />
    <!-- 加載提示文字 -->
    <attr name="loadingText" format="string" />
</declare-styleable>

示例:

<com.fngdo.statelayout.StateLayout
    xmlns:sl="http://schemas.android.com/apk/res-auto"
    android:id="@+id/state_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    sl:emptyImg="@drawable/ic_state_empty"
    sl:emptyText="空數據提示文字"
    sl:errorImg="@drawable/ic_state_error"
    sl:errorText="錯誤提示文字"
    sl:loadingText="加載提示文字"
    sl:loginImg="@drawable/ic_state_login"
    sl:loginText="登錄提示文字"
    sl:noNetworkImg="@drawable/ic_state_no_network"
    sl:noNetworkText="沒有網絡提示文字"
    sl:timeOutImg="@drawable/ic_state_time_out"
    sl:timeOutText="超時提示文字">
</com.fngdo.statelayout.StateLayout>

代碼提前設置圖標和文字

//type為StateLayout的固定Type變量
public static final int ERROR = 1;
public static final int EMPTY = 2;
public static final int TIMEOUT = 3;
public static final int NOT_NETWORK = 4;
public static final int LOADING = 5;
public static final int LOGIN = 6;

image

代碼設置顯示布局

//展示沒有網絡的界面
stateLayout.showNoNetworkView();
//展示超時的界面
stateLayout.showTimeoutView();
//展示空數據的界面
stateLayout.showEmptyView();
//展示錯誤的界面
stateLayout.showErrorView();
//展示登錄的界面
stateLayout.showLoginView();

//如下圖所示 1,直接顯示 2,設置提示stringId和圖片Id顯示 3,設置提示stringId顯示 4,設置提示字符串現實 5,設置提示字符串和圖片Id顯示</code></pre>

image

//顯示加載界面
stateLayout.showLoadingView();

1,直接顯示 2,設置提示stringId顯示 3,設置提示字符串現實 4,設置自定義加載View現實,如: 1)進度條 2)顯示gif的View 3)自定義布局View</code></pre>

image

//顯示自定義界面
stateLayout.showCustomView();

設置替換成自定義的界面:

image

設置切換界面動畫

動畫默認為 false ,如果需要開啟動畫,請調用

//開啟動畫
stateLayout.setUseAnimation(true);

如果用戶不設置自定義動畫,一般為默認的 漸隱縮放 動畫

如果用戶需要設置動畫,請調用

//設置動畫
stateLayout.setViewSwitchAnimProvider(new FadeScaleViewAnimProvider());

stateLayout 自定義了兩種動畫

//漸隱縮放,漸顯放大動畫
FadeScaleViewAnimProvider
//漸隱漸顯動畫
FadeViewAnimProvider

用戶如需自定義動畫樣式,請實現 ViewAnimProvider 接口

重寫 showAnimation 和 hideAnimation 方法。

//以FadeViewAnimProvider為例
public class FadeViewAnimProvider implements ViewAnimProvider {

@Override
public Animation showAnimation() {
    Animation animation = new AlphaAnimation(0.0f,1.0f);
    animation.setDuration(200);
    animation.setInterpolator(new DecelerateInterpolator());
    return animation;
}

@Override
public Animation hideAnimation() {
    Animation animation = new AlphaAnimation(1.0f,0.0f);
    animation.setDuration(200);
    animation.setInterpolator(new AccelerateDecelerateInterpolator());
    return animation;
}

}</code></pre>

監聽刷新和登錄點擊

請實現 StateLayout 里面的 OnViewRefreshListener 接口。

重寫兩個方法:

//刷新界面
void refreshClick();

//登錄點擊 void loginClick();</code></pre>

 

 

 

 

 本文由用戶 dumujiang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!