<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國際加速解決方案。 廣告
                # 1. 前言 屬性動畫可以設置監聽器來監聽動畫的播放過程。可以使用兩個接口: ~~~java Animator.AnimatorListener ValueAnimator.AnimatorUpdateListener ~~~ 在上一小節中提到:`ValueAnimator`僅為值得變化,直接應用沒有動畫效果的。如果可以監聽到值的變化,然后我們將其值應用到對應的對象的屬性上,那么就回產生對應的效果。 # 2. AnimatorUpdateListener監聽案例 這里就來做一個簡單的案例: ~~~ val start = textView.width Log.e("TAG", "onCreate: ${start}") // 0 val end = 700 // ValueAnimator值變化,這里模擬百分比 val valueAnimator = ValueAnimator.ofInt(1, 100) // 設置監聽 valueAnimator.addUpdateListener(object: ValueAnimator.AnimatorUpdateListener{ // 估值器 val intEvaluator: IntEvaluator = IntEvaluator() override fun onAnimationUpdate(animation: ValueAnimator?) { // 模擬進度具體值 // val currentValue = animation?.animatedValue // 獲取百分比 val animatedFraction = animation?.animatedFraction // 調用估值器,計算寬度,然后設置給Button val evaluateWidth = intEvaluator.evaluate(animatedFraction!!, start, end) // 變化屬性作用于width textView.layoutParams.width = evaluateWidth textView.requestLayout() } }) // 啟動 textView.setOnClickListener { valueAnimator.start() } ~~~ 雖然可以啟動,然后也能設置`TextView`的`width`屬性,但是開始變換的`width`值是從`0`開始的,雖然設置了`textView.width`,但是日志打印結果為`0`,顯然是不滿足我們的預期的,這里是因為還沒有渲染出來,也就是寬度值還沒有計算出來。所以直接將代碼丟到點擊函數中即可: ~~~ textView.setOnClickListener { val start = textView.width val end = 700 // ValueAnimator值變化,這里模擬百分比 val valueAnimator = ValueAnimator.ofInt(1, 100) valueAnimator.duration = 1000 // 設置監聽 valueAnimator.addUpdateListener(object: ValueAnimator.AnimatorUpdateListener{ // 估值器 val intEvaluator: IntEvaluator = IntEvaluator() override fun onAnimationUpdate(animation: ValueAnimator?) { // 模擬進度具體值 // val currentValue = animation?.animatedValue // 獲取百分比 val animatedFraction = animation?.animatedFraction // 調用估值器,計算寬度,然后設置給Button val evaluateWidth = intEvaluator.evaluate(animatedFraction!!, start, end) // 變化屬性作用于width textView.layoutParams.width = evaluateWidth textView.requestLayout() } }) valueAnimator.start() } ~~~ 點擊前: ![](https://img.kancloud.cn/d5/8f/d58f550cd16c22246c944e51b70e41d9_156x57.png) 點擊后: ![](https://img.kancloud.cn/61/7a/617a0c799987479ab560d619b43cede7_285x94.png) # 3. AnimatorListener監聽案例 ~~~ valueAnimator.addListener(object : Animator.AnimatorListener{ override fun onAnimationStart(animation: Animator?) { } override fun onAnimationEnd(animation: Animator?) { } override fun onAnimationCancel(animation: Animator?) { } override fun onAnimationRepeat(animation: Animator?) { } }) ~~~ 但是要實現的方法略多。所以官方提供了`AnimatorListenerAdapter`這個抽象類,用來實現用戶所需要的方法。
                  <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>

                              哎呀哎呀视频在线观看