Android Animation動畫總結

動畫的分類

一、視圖動畫

動畫的監聽器 animation.setAnimationListener(new AnimationListener() { });

(一)幀動畫(必須針對ImageView來做的)

定義: 一幀一幀的。很多靜態圖片不斷切換的效果。就是圖片的切換效果。類似gif動圖。

使用:

(1)創建資源文件

res/drawableanimation-list作為根節點

屬性oneshot:是否重復

子節點設置要顯示的圖片(drawable)和時間(duration)

frame.xml代碼:

android:oneshot="false">

(2)java代碼中使用步驟

//設置圖片空間的背景資源

img.setBackgroundResource(R.drawable.frame);

//獲取到靜態圖片

Drawable?drawable?=?img.getBackground();

//強制轉變成動態圖

AnimationDrawable?animationDrawable?=?(AnimationDrawable)?drawable;

//啟動動態圖片

animationDrawable.start();

(二)補間動畫(操作的控件是任意的)

本質上控件還是在原位置,只是它的試圖在改變。

定義:知道開始和結束,將中間的過程給補充起來。

組件從初始狀態變成結束狀態,為了讓改變看起來更自然更平滑的的一種動畫

使用:

1.平移TranslateAnimation

方法一、

(1)創建資源文件

在res文件下創建anim文件以translate作為根節點

屬性:

android:fromXDelta? ? ? x的初始位置:原位置的x坐標+參數

android:toXDelta="100"? ? x的結束位置:原位置的x坐標+參數(像素點)

注:x坐標向右伸展,y坐標向下伸展

android:duration? ? 動畫展示的時間

android:fillAfter? ? ? ? 讓動畫保持平移后的狀態

android:repeatCount? ? ? ? 重復的次數? ? infinite? ? 一直重復移動

android:repeatMode? ? ? ? 重復的模式

reverse? ? 來回重復(倒序)

restart? ? 重新開始(默認的)

(2)java代碼中使用步驟:

//把一個動畫的資源文件加載成一個動畫類

Animation?animation?=?AnimationUtils.loadAnimation(this,?R.anim.mytranslate);

TranslateAnimation?tAnimation?=?(TranslateAnimation)?animation;?//可以不寫

//啟動一個控件展示動畫

img.startAnimation(tAnimation);

方法二、使用構造方法

TranslateAnimation animation = new TranslateAnimation(0, 100, 0, 0);

/**

*?RELATIVE_TO_SELF:當前的x,y的坐標長度是相對于自己

*?RELATIVE_TO_PARENT:當前的x,y的坐標長度是相對于當前控件的父控件

*?0:原位置

*?1:原控件的1倍

*/

animation?=?new?TranslateAnimation(

Animation.RELATIVE_TO_SELF,?0,

Animation.RELATIVE_TO_PARENT,?0.5f,???//這里的0.5f是倍數(浮點型)

Animation.RELATIVE_TO_SELF,?0,

Animation.RELATIVE_TO_SELF,?0);

animation.setDuration(2000);????//設置時間

img.startAnimation(animation);

2.縮放ScaleAnimation

方法一、

(1)創建資源文件,在res/anim文件以scale作為根節點

屬性:

縮放的倍數

android:fromXScale="1", android:fromYScale="1"? ? 初始的x,y的坐標:原來x,y的坐標 * 參數

android:pivotX="50%", android:pivotY="50%"? ? 縮放點的x,y坐標

(2)java代碼中:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.myscale);

img.startAnimation(animation);

方法二、使用構造方法

/**

*?fromX:縮放的倍數(默認縮放的中心點:左上角)

*?pointX:縮放的中心位置(偏移量):偏移量=原來的x的坐標+參數

*?Animation.RELATIVE_TO_SELF,?0.5f????x+控件的寬度*0.5

*?Animation.RELATIVE_TO_PARENT,?0.5f????x+手機屏幕的寬度*0.5

*/

ScaleAnimation?animation?=?new?ScaleAnimation(0,?1,?0,?1);

animation?=?new?ScaleAnimation(0,?1,?0,?1,img.getWidth()/2,?img.getHeight()/2);

animation?=?new?ScaleAnimation(1,?0,?1,?0,

Animation.RELATIVE_TO_SELF,?0.5f,

Animation.RELATIVE_TO_SELF,?0.5f);

3.透明AlphaAnimation

方法一、

(1)創建資源文件

在res/anim文件以alpha作為根節點

屬性:

android:fromAlpha="1"? ? ? ? 開始的透明度(0~1之間)

android:toAlpha="0.5"? ? 結束的透明度

(2)java代碼中:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.myalpha);

img.startAnimation(animation);

方法二、使用構造方法

AlphaAnimation animation = new AlphaAnimation(1, 0.3f); //開始和結束的透明度值[0,1]

4.旋轉RotateAnimation

和"縮放"類似

5.幾種動畫一起

AnimationSet set = new AnimationSet(false);

//false,各自用自己的頻率,如果為true,表示都用父控件的頻率

//添加動畫類型,可以同時添加多個

set.addAnimation(animation);

set.addAnimation(animation);

img.startAnimation(set);

二、屬性動畫 property animation

動畫的監聽器 animation.addListener(new AnimatorListener() { });

方法一、

(1)創建資源文件

在res/animator文件以objectAnimator作為根節點

屬性:

android:propertyName="translationY"? ? 設置動畫的類型

android:valueFrom="0"? ? 設置移動的初始位置

android:valueTo="100"? ? 設置移動的結束位置

android:valueType="floatType"

(2)java代碼中:

//通過一個動畫資源加載器去加載一個動畫XML文件

ObjectAnimator?oa?=?(ObjectAnimator)?AnimatorInflater

.loadAnimator(this,?R.animator.myobjectanimator);

//綁定動畫的執行者

oa.setTarget(img);

oa.start();

方法二、使用構造方法

/**

*?????img:動畫的執行者

*?????translationX:動畫的名字

*?????0,100:執行動畫的可變參數(中間可以有多個)

*/

//????????img.setTranslationX(translationX); ? ?平移

//????????img.setScaleX(scaleX); ? ?縮放

//????????img.setAlpha(alpha); ? ?透明

//????????img.setRotationX(rotation); ? ?旋轉

ObjectAnimator?animator?=?ObjectAnimator.ofFloat(img,?"translationX",?0,50,0,100);

animator.setDuration(2000);

animator.start();

幾種動畫一起:

AnimatorSet?set?=?new?AnimatorSet();

set.playTogether(oa1,oa2);??//一起執行

// ? ?set.playSequentially(oa1,oa2);??//按照順序執行

set.start();

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

推薦閱讀更多精彩內容

  • Animation Animation類是所有動畫(scale、alpha、translate、rotate)的基...
    四月一號閱讀 1,936評論 0 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 1 背景 不能只分析源碼呀,分析的同時也要整理歸納基礎知識,剛好有人微博私信讓全面說說Android的動畫,所以今...
    未聞椛洺閱讀 2,746評論 0 10
  • 我的婚姻,或許已經結束。在我的心里,已不知道怎樣繼續,何去何從。 時間不長,兩年了,用兩年的時間認清楚,結婚時的想...
    善一寧閱讀 362評論 0 0
  • 2011年我在一個運輸公司任職財務工作,那年公司發生了一件大事,上了當地報紙。公司主要承接租車業務,大小汽車共有一...
    夏美好閱讀 485評論 0 2