天天看點

Android Animation之ScaleAnimation用法詳解

ScaleAnimation用法詳解

ScaleAnimation是Animation的子類,其有四個構造方法:

1、public ScaleAnimation(Context context, AttributeSet attrs)

方法的兩個參數中context就不再解釋了,上下文變量,attrs是屬性集。一般很少利用該構造方法構造ScaleAnimation,因為還要在XML檔案裡設定屬性的值,比較麻煩,不建議使用。

2、public ScaleAnimation(float fromX, float toX, float fromY, float toY)

fromX表示x坐标軸上動畫的起始位置,這個值并不是坐标,而是一個比例,比如fromX=0.5f,那麼就表示播放動畫的控件的x坐标都要乘以0.5,這是播放動畫時控件的初始的x軸的狀态,toX表示動畫結束時控件x軸方向的位置,同樣也是個比例,比如toX=1.0f,那麼動畫結束時x軸方向上控件恢複原狀,fromY和toY是Y分别是表示Y軸方向上動畫的初始位置和結束位置,也都是一個比例值。該情況下下坐标系是控件左上角為原點的。

代碼例子:

final Animation testAnimation = newScaleAnimation(0.5f,1.0f,1.0f,1.0f);
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
imageView.setOnClickListener(newView.OnClickListener() {
           @Override
           public void onClick(View v) {
               imageView.startAnimation(testAnimation);
           }
       });
           

代碼解讀:動畫一開始的時候,控件的每個點的x坐标都乘以0.5,y坐标不變,即水準方向上向左壓縮一半,動畫結束的時候控件的每個點的x坐标恢複原值,y坐标也為原始值。setFillAfter(true)的作用是動畫結束時保持結束的位置不動,setDuration(1000)是将動畫時長設為1000ms。

3、public ScaleAnimation(float fromX, float toX, float fromY, float toY,float pivotX,float pivotY)

該構造方法中有6個參數,前4個參數的意義和構造方法2的參數一樣,不再贅述,這裡重點說一下後兩個參數的用法,pivotX和pivotY是一個點的橫、縱坐标,這個坐标是真正的坐标值,而不再是一個比例,坐标系還是取控件的左上點為原點,我們記這個點為P,點P有什麼作用呢?它的作用就是作為一個固定點,在動畫播放的過程中,這個點保持不動,而周圍的點圍繞着這點進行縮放。在構造方法2中,pivotX和pivotY的值都為0,即相對于控件的左上角的那個點進行縮放變換。

代碼舉例:

final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,500.0f,0.0f);
testAnimation.setFillAfter(true);
testAnimation.setDuration(1000);
imageView.setOnClickListener(newView.OnClickListener() {
           @Override
           public void onClick(View v) {
               imageView.startAnimation(testAnimation);
           }
       });
           

代碼解讀:初始化動畫的時候,後兩個參數為500.0f和0.0f,這意味着縮放要圍繞點(500.0f,0.0f)進行,變換過程為控件的各個點的x坐标從(500-x)*0.5+x變化到(500-x)*0.8+x,y坐标從(500-y)*0.5+y變化到(500-y)*0.8+y,當然,x軸方向和y軸方向的變化是同時進行的。

4、public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType,floatpivotXValue, int pivotYType, float pivotYValue)

該構造方法一共有8個參數,前4個參數的意義和構造方法2的4個參數相同,這裡重點說一下後面4個參數的意義,總的來說後面4個參數的作用和構造方法3的後兩個參數一樣,是為了設定一個固定點,使得縮放是相對于這個固定點進行的。pivotXType和pivotYType指定的是一種類型,這兩個參數的值一般是一緻的,取值是Animation. ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT三者之一。

(1)      如果pivotXType和pivotYType取值為Animation. ABSOLUTE,那麼pivotXValue和pivotYValue表示的是坐标的絕對值,這時構造方法4的所起的的效果和構造方法3相同,這裡不再詳細解釋了;

(2)      如果pivotXType和pivotYType取值為Animation. RELATIVE_TO_SELF,pivotXValue和pivotYValue的值的是百分比(1表示100%),縮放的固定點就是(width*pivotXValue,height*pivotYValue),width和height分别是控件的寬度和高度,坐标系的原點還是控件的左上角。比如pivotXValue = 0.5f, pivotYValue=0.5f,那麼所設定的固定點就是控件的中心點,縮放動畫是相對于控件的中心進行的,代碼舉例:

final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        imageView.setOnClickListener(newView.OnClickListener() {
            @Override
            public void onClick(View v) {
               imageView.startAnimation(testAnimation);
            }
        });
        testAnimation.setFillAfter(true);
       testAnimation.setDuration(1000);
           

(3)      如果pivotXType和pivotYType取值為Animation. RELATIVE_TO_Parent,pivotXValue和pivotYValue的值的是百分比(1表示100%),縮放的固定點就是(width*pivotXValue,height*pivotYValue),width和height分别是控件的父容器的寬度和高度,坐标系的原點還是該控件的左上角。比如pivotXValue = 0.5f, pivotYValue=0.5f,那麼所設定的固定點就是控件的中心點,縮放動畫是相對于控件的中心進行的,代碼舉例:

final Animation testAnimation = newScaleAnimation(0.5f,0.8f,0.5f,0.8f,Animation.RELATIVE_TO_PARENT,0.0f,Animation.RELATIVE_TO_PARENT,0.5f);
        imageView.setOnClickListener(newView.OnClickListener() {
            @Override
            public void onClick(View v) {
               imageView.startAnimation(testAnimation);
            }
        });
        testAnimation.setFillAfter(true);
       testAnimation.setDuration(1000);
 
           

 以上是ScaleAnimation的4種構造方法的簡單講解,一般初始化後,在設定一些屬性值,比如setFillAfter、setDuration之後,就可以給控件用了,調用方法是View.startAnimation(Animation anim)。了解ScaleAnimation的構造方法的參數的準确意義,基本上就可以滿足對縮放動畫的基本的需求了。