一.android動畫分類
android動畫的分類在android3.0之前只有TweenAnimation(補間動畫)和FrameAnimation(逐幀動畫)兩大類,在android3.0之后google添加了PropertyAnimation(屬性動畫)。一般的特效在補間和逐幀動畫都可以實現,但是隨著人們的審美視覺的提升有許多的特效單獨的補間動畫已經不能很好的實現了,例如:3D的旋轉,對移動之后的動畫的點擊監聽等等。因此出現了PropertyAnimation(屬性動畫)。
二.Animation兩種使用方式
1.可以使用資源文件:在res文件夾建立文件夾anim文件夾,為該文件夾添加Animal資源。
然后再代碼中調用
這樣你就可以實現一個淡入的動畫了,如果你想要實現activity的淡入淡出效果的話可以調在finish,或者staractivity之后調用this.overridePendingTransition(淡入動畫,淡出動畫)這個方法。
2.可以在代碼中直接定義你所想要的動畫。
同時可以在每個動畫中添加setInterpolator方法,來添加動畫的“加速度”,他的參數有:
AccelerateInterpolator :加速,開始時慢中間加速
DecelerateInterpolator:減速,開始時快然后減速
AccelerateDecelerateInterolator:先加速后減速,開始結束時慢,中間加速
AnticipateInterpolator:反向,先向相反方向改變一段再加速播放
AnticipateOvershootInterpolator:反向加超越,先向相反方向改變,再加速播放,會超出目的值然后緩慢移動至目的值
BounceInterpolator:跳躍,快到目的值時值會跳躍,如目的值100,后面的值可能依次為85,77,70,80,90,100
CycleIinterpolator:循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2* mCycles* Math.PI* input)
LinearInterpolator:線性,線性均勻改變
OvershottInterpolator:超越,最后超出目的值然后緩慢改變到目的值
如果想要讓畫面停留在動畫之后的狀態可以使用setFillAfter(boolean b)方法來實現。
3.多種動畫混合使用:
三.FrameAnimation使用
Android下所有的資源文件均要放在/res目錄下,對于動畫幀的資源需要當成一個Drawable,所以需要把它放在/res/Drawable目錄下。而定義逐幀動畫非常簡單,只要在元素中使用子元素定義動畫的全部幀,并制定各幀的持續時間即可。還可以在元素中添加屬性,來設定逐幀動畫的屬性。定義好逐幀動畫的資源文件之后,只需要使用getResources().getDrawable(int)方法獲取AnimationDrawable示例,然后把它設置為某個View的背景即可。
然后再代碼中使用代碼:
imPic.setImageResource(R.drawable.animationlist);
AnimationDrawable animationDrawable = (AnimationDrawable)imPic.getDrawable();
animationDrawable.start();
這樣就可以實現一個簡單的幀動畫了。
四.屬性動畫
//屬性縮放動畫
ObjectAnimator Scaleanimation = ObjectAnimator.ofFloat(mBinding.tvSclate,"ScaleX",1f,3f);
Scaleanimation.setDuration(3000);
Scaleanimation.start();
//屬性旋轉動畫
ObjectAnimator Rotameanimation = ObjectAnimator.ofFloat(mBinding.tvRotame,"RotationX",360);
Rotameanimation.setDuration(3000);
Rotameanimation.start();
//屬性平移動畫
ObjectAnimator TranAnimator = ObjectAnimator.ofFloat(mBinding.tvTranslate,"TranslationX",mBinding.tvTranslate.getTranslationX(),-600,mBinding.tvTranslate.getTranslationX());
TranAnimator.start();
//屬性淡入淡出動畫
ObjectAnimator Alphaanimator = ObjectAnimator.ofFloat(mBinding.tvInAlpha,"Alpha",0.1f,1.0f);
Alphaanimator.setDuration(3000);
Alphaanimator.start();
屬性動畫集
ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview,"translationX", -500f, 0f);
ObjectAnimator?rotate?=?ObjectAnimator.ofFloat(textview,"rotation",?0f,?360f);
ObjectAnimator?fadeInOut?=?ObjectAnimator.ofFloat(textview,"alpha",?1f,?0f,?1f);
AnimatorSet?animSet?=newAnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();