本文將介紹property Animator的具體使用。同其餘的動畫實現同樣,也支持xml設置和代碼設置,也可以實現一組動畫的執行。java
來看下實例android
xml的,android推薦在res/animator/目錄下定義xml文件具體以下函數
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="scaleX" android:duration="2000" android:valueFrom="1.0" android:valueTo="2.0" android:repeatCount="1" android:repeatMode="reverse" />
能夠看到使用的動畫類是ObjectAnimator,定義的動畫特性有duration持續時間爲2000ms,repeatCount重試次數爲1次,repeatMode重試模式爲reverse倒退。propertyName修改的屬性爲scaleX,valueFrom,valueTo,此時表示從比例1到比例2動畫
若是想要執行一組動畫以下:
spa
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially"> <objectAnimator android:propertyName="scaleX" android:duration="2000" android:valueFrom="1.0" android:valueTo="2.0" android:repeatCount="1" android:repeatMode="reverse" /> <objectAnimator android:propertyName="scaleY" android:duration="2000" android:valueFrom="1.0" android:valueTo="2.0" android:repeatCount="1" android:repeatMode="reverse" /> </set>
代碼中設置動畫code
設置單個動畫的代碼xml
scaleXAnimator = new ObjectAnimator(); scaleXAnimator.setTarget(textView); scaleXAnimator.setPropertyName("scaleX"); scaleXAnimator.setDuration(2000); scaleXAnimator.setRepeatCount(1); scaleXAnimator.setRepeatMode(ValueAnimator.REVERSE); scaleXAnimator.setFloatValues(1,2);
設置一組動畫的代碼對象
set = new AnimatorSet(); scaleXAnimator = new ObjectAnimator(); scaleXAnimator.setTarget(textView); scaleXAnimator.setPropertyName("scaleX"); scaleXAnimator.setDuration(2000); scaleXAnimator.setRepeatCount(1); scaleXAnimator.setRepeatMode(ValueAnimator.REVERSE); scaleXAnimator.setFloatValues(1, 2); scaleYAnimator = ObjectAnimator.ofFloat(textView,"scaleY",1,2); scaleYAnimator.setDuration(2000); scaleYAnimator.setRepeatCount(1); scaleYAnimator.setRepeatMode(ValueAnimator.REVERSE); set.playTogether(scaleXAnimator,scaleYAnimator);
還能夠其餘的方式來同時改變多個屬性接口
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f); PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f); ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
或是使用ViewPropertyAnimator事件
myView.animate().x(50f).y(100f);
還能夠設置插值經過調用setInterpolator方法,android已經定義了一些插值器
AccelerateInterpolator:加速,開始慢中間加速
DecelerateInterpolator:減速,開始時塊而後減速
AccelerateDecelerateInterolator:先加速後減速,開始結束時慢,中間加速
AnticipateInterpolator:反向,先向相反方向執行一段再加速播放
AnticipateOvershootInterpolator:反向加回彈,先向相反方向改變,再加速播放,會超出目的值而後緩慢移動到目的值
BounceInterpolator:跳躍,快到目的值會跳躍,如目的值100.後面值可能依次爲85,77,70,80,90,100
CycleIinterpolator:循環,動畫循環必定次數,值得改變爲宜正弦函數Math.sin(2*mCycles*Math.PI*input)
LinearInterpolator:線性,線性均勻改變
OvershottInterpolator:回彈,最後超出目的值而後緩慢改變到目的值
TimeInterpolator:一個接口,容許你自定義interpolator,以上都是實現了這個接口。
ViewGroup中的layout的動畫
與view動畫同樣,property動畫系統對Viewgroup對象的動畫顯示提供了支持。你能夠用LayoutTransition類來動畫顯示Viewgroup中的layout。經過把View加入或移出ViewGroup,或者以VISIBLE、INVISIBLE、GONE調用View的setVisibility()方法,能夠實現某個View的顯現和消息效果。當你添加或刪除View時,ViewGroup中的其餘View也能夠用動畫的方式移動到新的位置顯示。你能夠調用LayoutTransition對象的setAnimator()方法來定義下載動畫方式。調用參數是Animator對象和如下LayoutTransition常量:
APPEARING:元素在容器中顯現時須要動畫顯示
CHANGE_APPEARING:因爲容器中藥顯示一個新的元素,其餘元素的變化須要動畫顯示
DISAPPEARING:元素在容器中消息時須要動畫顯示
CHANGE_DISAPPEARING:因爲容器中某個元素要消失,其餘元素的變化須要動畫顯示
你能夠爲這4種事件定義本身的動畫方式,已便定製layout變化時的外觀,也能夠只是通知動畫系統採用默認的動畫方式。在xml中你只要爲ViewGroup的android:animateLayoutchanges屬性設爲true,將會自動把view加入和移出的過程已動畫方式顯示,ViewGroup中其餘的View同時也會以動畫方式進行調整。