江西省的建設(shè)廳官方網(wǎng)站社群營(yíng)銷方案
在屬性動(dòng)畫中,常用到的API有ValueAnimator,ObjectAnimator。
ValueAnimator:時(shí)間引擎,負(fù)責(zé)計(jì)算各個(gè)幀的屬性值,基本上其他屬性動(dòng)畫都會(huì)直接或間接繼承它;
ObjectAnimator: ValueAnimator 的子類,對(duì)指定對(duì)象的屬性執(zhí)行動(dòng)畫。
屬性動(dòng)畫可以看作是增強(qiáng)版的補(bǔ)間動(dòng)畫,與補(bǔ)間動(dòng)畫的不同之處體現(xiàn)在:
補(bǔ)間動(dòng)畫只能定義兩個(gè)關(guān)鍵幀在透明、旋轉(zhuǎn)、位移和傾斜這四個(gè)屬性的變換,但是屬性動(dòng)畫可以定義任何屬性的變化。
補(bǔ)間動(dòng)畫只能對(duì) UI 組件執(zhí)行動(dòng)畫,但屬性動(dòng)畫可以對(duì)任何對(duì)象執(zhí)行動(dòng)畫。
與補(bǔ)間動(dòng)畫類似的是,屬性動(dòng)畫需要定義幾個(gè)方面的屬性:
動(dòng)畫持續(xù)時(shí)間。默認(rèn)為300ms, android:duration 屬性指定。
動(dòng)畫插值方式 ,android:interploator 指定。
動(dòng)畫重復(fù)次數(shù), android:repeatCount 。
重復(fù)行為 ,android:repeatMode 指定。
動(dòng)畫集,在屬性資源文件中通過(guò) <set …/> 來(lái)組合。
幀刷新率,指定多長(zhǎng)時(shí)間播放一幀。默認(rèn)為 10 ms。
ValueAnimator
ValueAnimator valueAnimator=ValueAnimator.ofFloat(0f,1f);
valueAnimator.setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){@Overridepublic void onAnimationUpdate(ValueAnimator animtion){float value=(float)animation.getAnimatedValue();log.e(...)}
});
valueAnimator.start();
ObjectAnimator
TextView textview=findViewById(R.id.tv);
//只要TextView類有alpha對(duì)應(yīng)的get set方法,就可以用這個(gè)屬性,并不一定需要有字段。
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textview,"alpha",0f,1f);
objectAnimator.setDuration(2000);
valueAnimator.start();//這個(gè)監(jiān)聽(tīng)器需要重寫4個(gè)方法,如果不需要4個(gè),則添加下面的匿名類
objectAnimator.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animation animation) {//動(dòng)畫開始時(shí)執(zhí)行}@Overridepublic void onAnimationRepeat(Animation animation) {//動(dòng)畫重復(fù)時(shí)執(zhí)行}@Overridepublic void onAnimationCancel()(Animation animation) {//動(dòng)畫取消時(shí)執(zhí)行}@Overridepublic void onAnimationEnd(Animation animation) {//動(dòng)畫結(jié)束時(shí)執(zhí)行}});//這個(gè)只需要重寫你需要的方法即可
objectAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationStart(Animation animation) {//動(dòng)畫開始時(shí)執(zhí)行}});