在我剛開始做移動App開發(fā)的時(shí)候况芒,事實(shí)上肥惭,Android端的動畫主要有2種:幀動畫和補(bǔ)間動畫。這兩種動畫疟暖,雖然能實(shí)現(xiàn)一些動畫效果恍风,然而卻都存在著不小的缺陷。伴隨著Android3.0的推出誓篱,google推出了更為強(qiáng)大的屬性動畫朋贬,前兩種動畫逐漸被替代。本篇文章也直接省略幀動畫和補(bǔ)間動畫窜骄,著重介紹屬性動畫锦募。
首先介紹一下,最簡單也最常用的幾種動畫:
//漸變動畫
public void runAlphaAnimation(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0.1f, 1.0f);
animator.start();
}
//平移動畫
public void runTranslateAnimation(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0.5f, 80f);
animator.start();
}
//縮放動畫
public void runScaleAnimation(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
animator.start();
}
//旋轉(zhuǎn)動畫
public void runRotateAnimation(View view) {
PropertyValuesHolder yHolder = PropertyValuesHolder.ofFloat("rotationY", 0f, 90f, 180f, 360f);
PropertyValuesHolder xHolder = PropertyValuesHolder.ofFloat("rotationX", 0f, 90f, 180f, 360f);
ObjectAnimator.ofPropertyValuesHolder(view, yHolder, xHolder).setDuration(1000).start();
}
??上面四種動畫邻遏,基本涵蓋了補(bǔ)間動畫的所有操作糠亩。<code>PropertyValuesHolder </code>這個(gè)類,需要說明一下准验。它的作用赎线,是可以把動畫臨時(shí)存儲起來,然后播放動畫時(shí)糊饱,同時(shí)執(zhí)行垂寥。其效果等同于:
ObjectAnimator xanimator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
ObjectAnimator yanimator = ObjectAnimator.ofFloat(view, "scaleY", 0.1f, 1.0f);
AnimatorSet set = new AnimatorSet();
set.play(xanimator).with(yanimator);
除了上面這4種最常用的,還有一種幀動畫另锋,我們也會經(jīng)常需要用到滞项。就是幀動畫,可以參考幀動畫替代方案這篇文章夭坪。不過使用的時(shí)候需要在布局文件中添加該控件文判,否則沒有效果。
<com.fragmenttest.LevelImageView
android:id="@+id/image"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginTop="20dp"/>
java文件中:
LevelImageView imageView = (LevelImageView) findViewById(R.id.image);
//設(shè)置level資源.
imageView.setImageResource(R.drawable.level_image);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
//新建動畫.屬性值從1-10的變化
ObjectAnimator headerAnimator = ObjectAnimator.ofInt(imageView, "imageLevel", 1, 4);
//設(shè)置動畫的播放數(shù)量為一直播放.
headerAnimator.setRepeatCount(ObjectAnimator.INFINITE);
//設(shè)置一個(gè)速度加速器.讓動畫看起來可以更貼近現(xiàn)實(shí)效果.
headerAnimator.setInterpolator(new LinearInterpolator());
headerAnimator.setRepeatMode(ObjectAnimator.RESTART);
headerAnimator.setDuration(600);
headerAnimator.start();