Android圖像與動畫<3>

android項目中為了界面的展示和效果,不可避免的用到圖片和動畫,所以我會分三個模塊來講解自己所知道的圖像處理和各種的動畫視覺顯示,學習中,虛心接受大神們的建議。

堅持寫完了Android圖像與動畫,可能剛開始使用簡書,是不是寫的內(nèi)容有點乏味,通俗不易懂。這篇主要講解最后最常用的屬性動畫,盡量簡言通俗又易懂,生動有趣,符合大眾的學習快速心理,看官們也可以多提建議,共同進步。噠噠~~

** 屬性動畫 **

前面詳細寫了視圖動畫和屬性動畫,但是Android3.0之后,系統(tǒng)推出屬性動畫,讓我們來塑造view對象的時候更廣泛,不僅針對view對象,可以對它的屬性設(shè)置,比如字體顏色,背景變化,padiing等等,但是如果使用視圖動畫更簡單的完成你想要的效果,也沒必要非的使用屬性動畫,嘿嘿,所以Android代碼沒有絕對好絕對不好,達到客戶的需求是最重要的。

屬性動畫有兩個常用的類:ValueAnimator和ObjectAnimator

ValueAnimator

ValueAnimator用法相對挺簡單的,我們只需要將初始值和結(jié)束值提供它,并且告訴它動畫所需運行的時長,那么ValueAnimator就會自動幫我們完成從初始值平滑地過渡到結(jié)束值這樣的效果。

  mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              //0 表示開始的值   100表示結(jié)束的值
                ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,100);
             //設(shè)置動畫的時間
                valueAnimator.setDuration(3000);
           // 添加一個監(jiān)聽器為了方面能看出運行的結(jié)果。
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        Log.i("tag","當前的value值"+valueAnimator.getAnimatedValue());
                    }
                });
                valueAnimator.start();

動畫的過程中不斷的調(diào)用onAnimationUpdate()方法,所以value值從0到100一直在變化。打印出來的效果圖 如下:

涼菇?jīng)?png

注意:ofFloat()方法可以傳入任意多個參數(shù)。例如

// 在3秒內(nèi)從0過渡到5,再過渡到3,再過渡到10。
ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f);```

**ObjectAnimator**

ObjectAnimator的父類是ValueAnimator,所以繼承了父親的有點,在這基礎(chǔ)上增加了對指定的屬性動畫的功能,例如 動畫View的alpha屬性的值。

mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// mImageView指定控件 alpha 指定控件的屬性 后面的屬性值表示從1f 到0f 再到 1f
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(mImageView,"alpha",1f,0f,1f);
objectAnimator.setDuration(5000);
objectAnimator.start();
}
});```

第二個參數(shù)是控件的屬性,除了alpha還可以是什么呢?可以是rotation、scaleY、translationX等等任意值。因為系統(tǒng)在執(zhí)行動畫時會通過反射機制調(diào)用對象的get和set方法。 比如,若我們給第二個參數(shù)傳遞abc,那么系統(tǒng)就是調(diào)用Button的setAbc和getAbc兩個方法。只要在get和set方法中執(zhí)行相應(yīng)的操作即可。

注意ObjectAnimator objectAnimator=ObjectAnimator.ofInt(mImageView,"paddingLeft",500);是沒有任何效果的,因為必須有g(shù)et和set兩種方法才能夠執(zhí)行動畫,現(xiàn)在只有g(shù)et方法要封裝一個setpaddingLeft的方法才能夠顯示效果。

 mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ObjectAnimator objectAnimator=ObjectAnimator.ofInt(new ViewWrapper(mImageView),"paddingLeft",500);
                objectAnimator.setDuration(5000);
                objectAnimator.start();
            }
        });```

// 一個普通的包裝類。
public class ViewWrapper {
private View mTarget;
public ViewWrapper(View view) {
this.mTarget = view;
}
public void setPaddingLeft(int paddingLeft) {
mTarget.setPadding(paddingLeft, mTarget.getPaddingTop(),
mTarget.getPaddingRight(), mTarget.getPaddingBottom());
}
}```

為了在各種安卓版本上使用屬性動畫,你需要采用nineoldandroids,它是GitHub開源項目,jar包和源碼都可以在網(wǎng)上下到 參考:https://cutler.github.io/android-D03/

菇?jīng)鏊樗檎Z:

Android大圖像處理和幾種動畫的使用簡單的介紹完了,這都是最基本的一些知識,復(fù)雜的動畫實現(xiàn)效果其實也都是簡單的動畫組合實現(xiàn)的,從初學者挺有幫助的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容