本文是閱讀了博客后,自己總結(jié)后精簡(jiǎn)了一下:http://blog.csdn.net/guolin_blog/article/details/43536355
補(bǔ)間動(dòng)畫針對(duì)的基本單位是控件,屬性針對(duì)的基本單位是控件的屬性;
ValueAnimator-數(shù)值變化器(針對(duì)數(shù)值變化):
說(shuō)明:對(duì)整型或浮點(diǎn)型數(shù)值實(shí)現(xiàn)平穩(wěn)過(guò)渡,并可以獲取過(guò)度數(shù)值;
代碼與詳解:
//變化的的數(shù)據(jù)類型為浮點(diǎn)行數(shù)據(jù),變化數(shù)值先從0f到5f到3f到10f;
ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f);
//設(shè)置動(dòng)畫持續(xù)時(shí)間
anim.setDuration(5000);
anim.setRepeatCount(4);//設(shè)置重復(fù)次數(shù)
anim.setRepeatMode(ValueAnimator.RESTART);//設(shè)置重復(fù)模式RESTART和REVERSE
//添加數(shù)值變化監(jiān)聽(tīng)器,獲得變化過(guò)程中的數(shù)值;
anim.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {
@Override
publicvoidonAnimationUpdate(ValueAnimator?animation)?{
//通過(guò)getAnimatedValue()獲得變化中的數(shù)值;
float currentValue?=?(float)?animation.getAnimatedValue();
}});
anim.start();//開(kāi)始數(shù)值變化
提示:通過(guò)setStartDelay()完成動(dòng)畫延時(shí)播放,ofFloat(),ofInt(),ofObject()
個(gè)人理解ofFloat()是針對(duì)float數(shù)值,那么ofObject()是針對(duì)類;
ObjectAnimator——屬性動(dòng)畫
繼承自:ValueAnimator
代碼與詳解:
ObjectAnimator animator = ObjectAnimator.ofFloat(textview,"alpha", 1f, 0f, 1f);
參數(shù)說(shuō)明:
textview:傳入我們具體要操作的對(duì)象(object)(可以是各種View,布局,自定義View也可以是其他類);
"alpha":具體操作的對(duì)象的具體屬性,對(duì)象中必須有該屬性的set和get方法,ObjectAnimator會(huì)計(jì)算得到數(shù)值后自動(dòng)調(diào)用該屬性的set和get方法,ObjectAnimator內(nèi)部的工作機(jī)制并不是直接對(duì)我們傳入的屬性名進(jìn)行操作的,而是會(huì)去尋找這個(gè)屬性名對(duì)應(yīng)的get和set方法,因此alpha屬性所對(duì)應(yīng)的get和set方法應(yīng)該就是:
1f,0f,1f:指明變化趨勢(shì);
animator.setDuration(5000);//設(shè)置持續(xù)時(shí)間
animator.start();//開(kāi)始動(dòng)畫
說(shuō)明:由于繼承自ValueAnimator,故又ValueAnimator的一系列set方法;
"alpha"屬性要求對(duì)象具有該屬性的set與get方法才可以實(shí)現(xiàn),在View中都具有alpha、rotation、translationX和scaleY的set與get方法,故屬性動(dòng)畫也可以完成控件的透明,旋轉(zhuǎn),移動(dòng),伸縮動(dòng)畫;
組合動(dòng)畫:
代碼示例與方法講解:
ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview,"rotation", 30f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofInt(textview,"rotation", 0f, 360);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview,"rotation", 1f, 0f, 1f);
AnimatorSet?animSet?=new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();
AnimatorSet:是一個(gè)組合器,通過(guò)with(),after()等方法將屬性動(dòng)畫進(jìn)行組合;
方法說(shuō)明:
play(Animator anim)傳入一個(gè)Animator對(duì)象(ValueAnimator或ObjectAnimator)將會(huì)返回一個(gè)AnimatorSet.Builder的實(shí)例
AnimatorSet.Builder中包括以下四個(gè)方法:
after(Animator anim)? 將現(xiàn)有動(dòng)畫插入到傳入的動(dòng)畫之后執(zhí)行
after(long delay) ? 將現(xiàn)有動(dòng)畫延遲指定毫秒后執(zhí)行
before(Animator anim) ? 將現(xiàn)有動(dòng)畫插入到傳入的動(dòng)畫之前執(zhí)行
with(Animator anim) ? 將現(xiàn)有動(dòng)畫和傳入的動(dòng)畫同時(shí)執(zhí)行;
Animator監(jiān)聽(tīng)器:
ValueAnimator,ObjectAnimator,AnimatorSet采用的是相同的監(jiān)聽(tīng)器:
anim.addListener(newAnimatorListener() {
@Override
public voido nAnimationStart(Animator?animation)?{
}
@Override
public void onAnimationRepeat(Animator?animation)?{
}
@Override
public void onAnimationEnd(Animator?animation)?{
}
@Override
public void onAnimationCancel(Animator?animation)?{
//動(dòng)畫被取消
}});
適配器監(jiān)聽(tīng)器:(只需要從寫自己需要的方法)
anim.addListener(newAnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator?animation)?{
}
});
使用XML編寫動(dòng)畫
第一步:首先要在res目錄下面新建一個(gè)animator文件夾,所有屬性動(dòng)畫的XML文件都應(yīng)該存放在這個(gè)文件夾當(dāng)中。
第二步:
<set xmlns:android="htt://schemas.android.com/apk"
android:ordering="sequentially">
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="-500"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator>
<set android:ordering="together">
<objectAnimatory
android:duration="3000"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="360"
android:valueType="floatType" >
</objectAnimatory>
<set android:ordering="sequentially">
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator>
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" >
</objectAnimator>
</set></set></set>
說(shuō)明:ordering 有兩個(gè)選項(xiàng):sequentially (順序執(zhí)行)和 together(一起執(zhí)行) 。其中 together 為默認(rèn)項(xiàng)
也許抄襲別人的代碼,也是一種成長(zhǎng)的方法;