| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
tianzhidao
8年前发布

StateListAnimator 介绍

   <p><a href="/misc/goto?guid=4959676770717975318" rel="nofollow,noindex">StateListAnimator</a> 是在 Android 5.1 版本引入的。在这之前,处理 View 的点击状态一般都是使用 StateListDrawable 来完成的。</p>    <p>啥? 您没用过 StateListDrawable ?</p>    <p>下面的文件 (res/drawable/foreground_selector.xml) 内容,您一定很熟悉吧!</p>    <pre>  <code class="language-xml"><?xmlversion="1.0" encoding="utf-8"?>  <selectorxmlns:android="http://schemas.android.com/apk/res/android">    <itemandroid:color="@color/transparentAccent"      android:state_pressed="true">      <shape>        <solidandroid:color="@color/transparentAccent"/>      </shape>    </item>       <item>      <shape>        <solidandroid:color="@android:color/transparent"/>      </shape>    </item>  </selector>  </code></pre>    <p>这就是一个 StateListDrawable 对象,当设置为 View 的背景的时候,不同的状态可以使用不同的背景图片表示。</p>    <p>效果如下图:</p>    <p><img src="https://simg.open-open.com/show/0c6bbe2d8ae7717a6956bdb9958f622c.gif"></p>    <p>您可能会问, 使用 StateListDrawable 很好啊, 不同的点击状态使用不同的背景来表示,为啥还要搞个新的 StateListAnimator 呢?</p>    <p>原因是在 Android 5.0系统开始引入了新的 <a href="/misc/goto?guid=4959676770823759213" rel="nofollow,noindex">Material Design(纸墨设计)</a> 规范,而在 纸墨设计规范中动画是非常重要的,通过各种动画来指导用户操作以及凸显重要的内容。 StateListDrawable 只是简单的状态切换,并没有动画所以不太符合 纸墨设计 规范的要求,因此从新设计了一个 StateListAnimator。</p>    <p>既然是一个 Animator ,就说明该类可以对 View 的属性做动画。</p>    <p>比如:(res/animator/selector_animator.xml)</p>    <pre>  <code class="language-xml"><?xmlversion="1.0" encoding="utf-8"?>  <selectorxmlns:android="http://schemas.android.com/apk/res/android">    <itemandroid:state_pressed="true">      <objectAnimator        android:duration="@android:integer/config_shortAnimTime"        android:propertyName="translationZ"        android:valueTo="4dp"        android:valueType="floatType"/>    </item>       <item>      <objectAnimator        android:duration="@android:integer/config_shortAnimTime"        android:propertyName="translationZ"        android:valueTo="0dp"        android:valueType="floatType"/>    </item>  </selector>  </code></pre>    <p>根元素依然为 selector, 只不过该文件是在 animator 目录中的。每个 item 为一个 objectAnimator 对象 用来对 View 的属性做动画。 可以把这个文件设置到 View 的 stateListAnimator 属性上去:</p>    <p>android:stateListAnimator=”@animator/selector_animator”</p>    <p>效果如下:</p>    <p><img src="https://simg.open-open.com/show/6daf8915f5a3a02d22b4d1714cb4ed5f.gif"></p>    <p>另外值得说明的是,在 item 中不仅可以使用 objectAnimator 还可以使用多个 objectAnimator 来实现复杂的动画,多个 objectAnimator 放到一个 set 中:</p>    <pre>  <code class="language-xml"><?xmlversion="1.0" encoding="utf-8"?>  <selectorxmlns:android="http://schemas.android.com/apk/res/android">    <itemandroid:state_pressed="true">      <set>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="scaleX"          android:valueTo="1.025"          android:valueType="floatType"/>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="scaleY"          android:valueTo="1.025"          android:valueType="floatType"/>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="translationZ"          android:valueTo="4dp"          android:valueType="floatType"/>      </set>    </item>       <item>      <set>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="scaleX"          android:valueTo="1.0"          android:valueType="floatType"/>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="scaleY"          android:valueTo="1.0"          android:valueType="floatType"/>        <objectAnimator          android:duration="@android:integer/config_shortAnimTime"          android:propertyName="translationZ"          android:valueTo="0dp"          android:valueType="floatType"/>      </set>    </item>     </selector>  </code></pre>    <p>效果:</p>    <p><img src="https://simg.open-open.com/show/7df813aa1624f39297abb82467b8f2c6.gif"></p>    <p>本文示例中的代码位于 <a href="/misc/goto?guid=4959676770917310253" rel="nofollow,noindex">github</a> 。 原文位于 <a href="/misc/goto?guid=4959676102322799692" rel="nofollow,noindex">stylingandroid</a> 。</p>    <p> </p>    <p>来自:http://blog.chengyunfeng.com/?p=1014</p>    <p> </p>    
 本文由用户 tianzhidao 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1471219964817.html
安卓开发 Android Android开发 移动开发