Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android技術進階的要素之Android屬性動畫

Android技術進階的要素之Android屬性動畫

編輯:Android開發教程

由於Android3.0之前就有了許多的動畫框架,其中之一就是Animation,但是隨著時代的發展和交互要求的提高,Animation的局限性也越來越明顯,例如:Anmiation動畫不能響應點擊事件等等。因此,在Android3.0之後,Google推出了新的動畫框架——屬性動畫(Animator)。

而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator進行更加精細化的控制,只控制一個對象的一個屬性值,而使用多個ObjectAnimator組合到AnimatorSet形成一個動畫。並且ObjectAnimator能夠自動驅動,可以調用SetFrameDelay(longframeDelay)設置動畫幀之間的間隙時間,調整幀率,減少動畫過程中頻繁的繪制界面,而在不影響動畫效果的前提下減少了CPU的資源消耗。

接下來就看看屬性動畫中最基礎的ObjectAnimator。

先看看基本的用法格式:

      (View tv) {
        animator = ObjectAnimator.ofFloat(tv, , );
        animator.setDuration();
        animator.start();
    }

tv是一個控件,“alpha”是一個字符串格式的屬性值,除了這個屬性值,還有

translationY 、translationX :這兩個屬性作為一種增量來控制著View對象從布局容器的左上角坐標偏移的位置
rotation、rotationX、rotationY:控制View對象圍繞支點進行2D和3D旋轉。
scaleX、scaleY :控制View對象圍繞支點進行2D縮放
prvotX、pivotY :控制控件圍繞這個點進行縮放變換處理
x、y: 描述的是View對象在它的容器中的最終位置,它最初的左上角坐標和translationY 、translationX值的累積和。
alpha 控制透明度

這個是針對一個對象一個屬性的用法,如果是有多個屬性,那就要用到PropertyValuesHolder

比如現在要實現一個平移縮放的動畫效果,那具體的做法就是:

    
      () {
        PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat(
                , f);

        PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat(, f,
                );
        PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat(, f,
                );
        ObjectAnimator.ofPropertyValuesHolder(tv, pvh1, pvh2, pvh3)
                .setDuration().start();


    }

其實用法跟AnimationSet類似,同時,也跟我們後面要講的AnimatorSet的用法類似。

接下來,再看看另外在屬性動畫裡面占有很重要的地位的類——ValueAnimator

這個類其實相當強大,就連ObjectAnimator也是繼承它的。它本身不帶有動畫效果,但是它能生成許多的有規律的數字,那麼我們有了這個數字,當然也可以實現動畫的效果了,比如下面的這個用法:

      () {
        final ValueAnimator animator =ValueAnimator.ofFloat(,);
        animator.setTarget(tv);
        animator.setDuration().start();
        animator.addUpdateListener( AnimatorUpdateListener() {

            @Override
              (ValueAnimator arg0) {
                  =() arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();
                layoutParams.height =() ;
                layout.setLayoutParams(layoutParams);
            }
        });
    }

這裡是通過有這寫數據,來不斷的設置View的高度,實現一個動畫的效果。

最後來看看AnimatorSet,前面提到過,它的用法和PropertyValuesHolder 是很相似的,但是不同的是,它可以實現多個對象和多種屬性的同時動畫效果,大概的用法如下:

      oneAnimatorSet(){
        ObjectAnimator animator=ObjectAnimator.ofFloat(tv, , );
        ObjectAnimator animator2=ObjectAnimator.ofFloat(tv, , ,,);
        ObjectAnimator animator3=ObjectAnimator.ofFloat(tv, ,  ,,);
        AnimatorSet  =  AnimatorSet();
        .setDuration();
        .playTogether(animator,animator2,animator3);
        .start();
    }

在屬性動畫中,Animator正是通過playTogether(),with()、before等等方法來控制協調的,這樣就是實現對動畫播放的順序精確控制。

今天只是簡單的認識一下基本用法,我會在後期的學習中,推出具有實戰意義的動畫效果。謝謝閱讀。

最後,感謝徐宜生大神。

URL:http://www.bianceng.cn/OS/extra/201608/50361.htm

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved