XStateController,几近完美的状态控制机来袭
erose_lu
8年前
<p>StateController 顾名思义:状态控制机,用作几个状态的切换。该控件可以在 Loading & Empty & Error & Content 四个状态的自定义动画切换。 </p> <p> </p> <h2>特性</h2> <ul> <li>不受布局层级的控制,可任意大小、任意层级</li> <li>支持xml设置状态布局资源</li> <li>支持java代码设置状态布局</li> <li>可自定义动画切换状态</li> <li>可注册状态切换回调</li> <li>支持异常情况的状态保存</li> <li>可以设置一个或几个状态,无需全部状态设置</li> </ul> <h2>集成步骤</h2> <h3>step1</h3> <p>在根项目的 build.gradle 文件中添加</p> <pre> <code class="language-java">allprojects { repositories { ... maven { url 'https://jitpack.io' } } }</code></pre> <h3>step2</h3> <p>添加依赖</p> <pre> <code class="language-java">dependencies { compile 'compile 'com.github.limedroid:XStateController:v1.1.0' }</code></pre> <p style="text-align:center"><img src="https://simg.open-open.com/show/2e60a59bbedc4d60cb9f73d2906afeb8.png"></p> <p>screenshot.png</p> <h2>使用</h2> <pre> <code class="language-java"><cn.droidlover.xstatecontroller.XStateController android:id="@+id/controller" android:layout_width="match_parent" android:layout_height="match_parent" app:x_emptyLayoutId="@layout/view_empty"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:background="#854678" android:gravity="center" android:text="Content" android:textColor="@android:color/white" android:textSize="28sp" /> </cn.droidlover.xstatecontroller.XStateController></code></pre> <h3>说明</h3> <ul> <li>当 XStateController 仅有一个子view(ViewGroup)时,该子view则为 ContentView</li> <li>可以通过xml属性设置布局,也可代码设置</li> </ul> <h3>attrs设置状态布局资源</h3> <pre> <code class="language-java"><attr name="x_contentLayoutId" format="reference" /> <attr name="x_loadingLayoutId" format="reference" /> <attr name="x_emptyLayoutId" format="reference" /> <attr name="x_errorLayoutId" format="reference" /></code></pre> <ul> <li>x_contentLayoutId 设置内容布局资源</li> <li>x_loadingLayoutId 设置加载中状态的布局资源</li> <li>x_emptyLayoutId 设置空状态的布局资源</li> <li>x_errorLayoutId 设置错误状态的布局资源</li> </ul> <h3>常见api</h3> <p>设置各状态的布局资源</p> <pre> <code class="language-java">loadingView(loadingView); //设置加载中的view emptyView(emptyView); //设置空view errorView(errorView); //设置errorView contentView(contentView); //设置contentView</code></pre> <p>状态切换</p> <pre> <code class="language-java">showLoading(); //切换到loading状态 showError(); //切换到error状态 showEmpty(); //切换到empty状态 showContent(); //切换到content状态</code></pre> <p>注册状态切换回调</p> <pre> <code class="language-java">registerStateChangeListener(xx);</code></pre> <p>回调的定义</p> <pre> <code class="language-java">public interface OnStateChangeListener { //状态切换时回调,oldState当前状态,newState目标状态 void onStateChange(int oldState, int newState); //动画,可自定义切换动画 void animationState(View exitView, View enterView); }</code></pre> <p>使用时可直接继承 <em>SimpleStateChangeListener</em></p> <p> </p> <p> </p> <p> </p>