可能是最优雅的切换布局的方法

dumujiang 8年前
   <h2>StateLayout用法</h2>    <h2>演示</h2>    <p style="text-align:center"><img src="https://simg.open-open.com/show/bdfa5b3937d02795ca0e1d1fdcc40ced.gif"></p>    <p style="text-align:center">演示图</p>    <h2>依赖</h2>    <p>第一步,在项目根目录的build.gradle加入,如果没有,请加入</p>    <pre>  <code class="language-java">allprojects {      repositories {          ...          maven { url 'https://jitpack.io' }      }  }</code></pre>    <p>第二步,依赖此库</p>    <pre>  <code class="language-java">compile 'com.github.fingdo:stateLayout:1.0.0'</code></pre>    <h2>使用方法</h2>    <h3>引入布局</h3>    <p>用法与SrcollView一致,只允许一个 根布局</p>    <pre>  <code class="language-java"><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></code></pre>    <h3>布局设置图标和文字</h3>    <pre>  <code class="language-java"><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></code></pre>    <p>示例:</p>    <pre>  <code class="language-java"><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></code></pre>    <h3>代码提前设置图标和文字</h3>    <pre>  <code class="language-java">//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;</code></pre>    <p style="text-align:center"><img src="https://simg.open-open.com/show/8e3618a80559e315af67dac93d93af31.png"></p>    <p style="text-align:center">image</p>    <h3>代码设置显示布局</h3>    <pre>  <code class="language-java">//展示没有网络的界面  stateLayout.showNoNetworkView();  //展示超时的界面  stateLayout.showTimeoutView();  //展示空数据的界面  stateLayout.showEmptyView();  //展示错误的界面  stateLayout.showErrorView();  //展示登录的界面  stateLayout.showLoginView();    //如下图所示  1,直接显示  2,设置提示stringId和图片Id显示  3,设置提示stringId显示  4,设置提示字符串现实  5,设置提示字符串和图片Id显示</code></pre>    <p style="text-align:center"><img src="https://simg.open-open.com/show/50f574db140600a34f7665586a4721b2.png"></p>    <p style="text-align:center">image</p>    <pre>  <code class="language-java">//显示加载界面  stateLayout.showLoadingView();    1,直接显示  2,设置提示stringId显示  3,设置提示字符串现实  4,设置自定义加载View现实,如:      1)进度条      2)显示gif的View      3)自定义布局View</code></pre>    <p style="text-align:center"><img src="https://simg.open-open.com/show/42e168edaf24954cac388961c190998c.png"></p>    <p style="text-align:center">image</p>    <pre>  <code class="language-java">//显示自定义界面  stateLayout.showCustomView();</code></pre>    <p>设置替换成自定义的界面:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/96c18503e53391dac2c0c420b6e7e9a4.png"></p>    <p style="text-align:center">image</p>    <h3>设置切换界面动画</h3>    <p>动画默认为 false ,如果需要开启动画,请调用</p>    <pre>  <code class="language-java">//开启动画  stateLayout.setUseAnimation(true);</code></pre>    <p>如果用户不设置自定义动画,一般为默认的 渐隐缩放 动画</p>    <p>如果用户需要设置动画,请调用</p>    <pre>  <code class="language-java">//设置动画  stateLayout.setViewSwitchAnimProvider(new FadeScaleViewAnimProvider());</code></pre>    <p>stateLayout 自定义了两种动画</p>    <pre>  <code class="language-java">//渐隐缩放,渐显放大动画  FadeScaleViewAnimProvider  //渐隐渐显动画  FadeViewAnimProvider</code></pre>    <p>用户如需自定义动画样式,请实现 ViewAnimProvider 接口</p>    <p>重写 showAnimation 和 hideAnimation 方法。</p>    <pre>  <code class="language-java">//以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>    <h3>监听刷新和登录点击</h3>    <p>请实现 StateLayout 里面的 OnViewRefreshListener 接口。</p>    <p>重写两个方法:</p>    <pre>  <code class="language-java">//刷新界面  void refreshClick();    //登录点击  void loginClick();</code></pre>    <p> </p>    <p> </p>    <p> </p>    <p> </p>