<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                #### 7.3.2 理解插值器和估值器 TimeInterpolator中文翻譯為時間插值器,它的作用是根據時間流逝的百分比來計算出當前屬性值改變的百分比,系統預置的有LinearInterpolator(線性插值器:勻速動畫)、AccelerateDecelerateInterpolator(加速減速插值器:動畫兩頭慢中間快)和Decelerate-Interpolator(減速插值器:動畫越來越慢)等。TypeEvaluator的中文翻譯為類型估值算法,也叫估值器,它的作用是根據當前屬性改變的百分比來計算改變后的屬性值,系統預置的有IntEvaluator(針對整型屬性)、FloatEvaluator(針對浮點型屬性)和ArgbEvaluator(針對Color屬性)。屬性動畫中的插值器(Interpolator)和估值器(TypeEvaluator)很重要,它們是實現非勻速動畫的重要手段。可能這么說還有點晦澀,沒關系,下面給出一個實例就很好理解了。 如圖7-1所示,它表示一個勻速動畫,采用了線性插值器和整型估值算法,在40ms內,View的x屬性實現從0到40的變換。 :-: ![](https://img.kancloud.cn/bc/bf/bcbf23270b117200c2b061f33edd719d_1353x352.png) 圖7-1 插值器的工作原理(注:此圖來自Android官方文檔) 由于動畫的默認刷新率為10ms/幀,所以該動畫將分5幀進行,我們來考慮第三幀(x=20, t=20ms),當時間t=20ms的時候,時間流逝的百分比是0.5(20/40=0.5),意味著現在時間過了一半,那x應該改變多少呢?這個就由插值器和估值算法來確定。拿線性插值器來說,當時間流逝一半的時候,x的變換也應該是一半,即x的改變是0.5,為什么呢?因為它是線性插值器,是實現勻速動畫的,下面看它的源碼: public class LinearInterpolator implements Interpolator { public LinearInterpolator() { } public LinearInterpolator(Context context, AttributeSet attrs) { } public float getInterpolation(float input) { return input; } } 很顯然,線性插值器的返回值和輸入值一樣,因此插值器返回的值是0.5,這意味著x的改變是0.5,這個時候插值器的工作就完成了。具體x變成了什么值,這個需要估值算法來確定,我們來看看整型估值算法的源碼: public class IntEvaluator implements TypeEvaluator<Integer> { public Integer evaluate(float fraction, Integer startValue, Integer endValue) { int startInt = startValue; return (int)(startInt + fraction * (endValue - startInt)); } } 上述算法很簡單,evaluate的三個參數分別表示估值小數、開始值和結束值,對應于我們的例子就分別是0.5、0、40。根據上述算法,整型估值返回給我們的結果是20,這就是(x=20, t=20ms)的由來。 屬性動畫要求對象的該屬性有set方法和get方法(可選)。插值器和估值算法除了系統提供的外,我們還可以自定義。實現方式也很簡單,因為插值器和估值算法都是一個接口,且內部都只有一個方法,我們只要派生一個類實現接口就可以了,然后就可以做出千奇百怪的動畫效果了。具體一點就是:自定義插值器需要實現Interpolator或者TimeInter-polator,自定義估值算法需要實現TypeEvaluator。另外就是如果要對其他類型(非int、float、Color)做動畫,那么必須要自定義類型估值算法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看