android 補間(Tween)動畫

來源:互聯網
上載者:User
 如果動畫中的映像變換的比較有規律時,可能採用自動生圖中間映像的方式來產生動畫,例像的移動、旋轉、縮放等。補間動畫的優點是可以節省空間的。

一、移動補間動畫

可以通過配置動畫檔案(xml檔案)或java代碼來實現補間動畫的移動效果。補間動畫檔案需要放在res\anim目錄下。假設在res\anim目錄下有一個動畫檔案test.xml,該檔案內容如下:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator" android:fromXDelta="-320"
android:toXDelta="320" android:fromYDelta="0" android:toYDelta="0"
android:duration="5000" />

1,android:interpolator:表示動畫渲染器。

accelerate_interpolator動畫加速器。動畫在開始時最慢,然後逐漸加速。

decelerate_interpolator動畫減速器。動畫在開始時最快,然後逐漸減速。

accelerate_decelerate_interpolator動畫加減速器。動畫在開始和結束時速度最慢,但在前半部分時開始加速,在後半部分時開始減速。

2,android:fromXDelta 動畫起始位置的X座標。

android:toXDelta 動畫結束位置的X座標。

android:fromYDelta 動畫起始位置的Y座標。

android:toYDelta 動畫結束位置的Y座標。

android:duration 動畫的期間,單位是毫秒。

裝載補間動畫

裝載補間動畫檔案需要使用AnimationUtils.loadAnimation方法。

裝載text.xml檔案的代碼如下:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.test);

animation.setRepeatCount(Animation.INFINITE);//迴圈顯示。

應用補間動畫

假設有一個EditText組件(editText),將test.xml檔案中設定的補間動畫應用到EditText組件上的方式有兩種:

(1) 使用EditText類的startAnimation方法:

editText.startAnimation(animation);

(2)使用Animation類的start方法:

//綁定補間動畫

editText.setAnimation(animation);

//開始動畫

animation.start();

如果想在該動畫結束後運行別的動畫或者別的操作,那麼需要在AnimationListener介面的onAnimationEnd方法中完成。下面的例子就是在炮彈動畫運行結束後,將其隱藏,然後再播放炸彈效果的動畫和聲音:

public void onAnimationEnd(Animation animation) {
//在投放炸彈動畫結束之後。。。。
ivBlast.setVisibility(View.VISIBLE);
ivMissile.setVisibility(View.INVISIBLE);
try {
//開始播放爆炸的聲音
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.bomb);
mediaPlayer.stop();
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}

下面的例子是,小球落到地面後又彈起的動畫:

public void onAnimationEnd(Animation animation) {
if(animation.hashCode() == animationBottom.hashCode()){
imageView.startAnimation(animationTop);
}else if(animation.hashCode() == animationTop.hashCode()){
imageView.startAnimation(animationBottom);
}
}

animationDrawable.stop();
animationDrawable.start();
}

二、縮放補間動畫

<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0"
android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="5000">
</scale>

android:pivotX 表示沿X軸方向縮放的支點位置。

android:pivotY 表示沿Y軸方向縮放的支點位置。

都為50%時,表示支點在中心位置。

三、旋轉補間動畫

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@animnear_interpolator" android:fromDegrees="0"

android:toDegrees="360" android:pivotX="50%" android:pivotY="50%"

android:duration="1000" android:repeatMode="restart" android:repeatCount="infinite"/>

android:repeatCount 設定旋轉的次數,值為-1或者infinite時,表示補間動畫永不停止。0表示一次。

android:repeatMode 設定重複的模式。預設是restart。當repeatCount的值大於0或者為infinite時才有效。

還可以設成reverse,表示偶數次顯示動畫時會做與動畫檔案定義的方向相反的方向動行。

四、透明補間動畫

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.1" android:duration="2000" />

五、多種補間動畫一起應用

<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.1" android:duration="2000" />
<translate android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="0"
android:toYDelta="-380" android:duration="2000" />
<scale android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="1.0" android:toXScale="0.2" android:fromYScale="1.0"
android:toYScale="0.2" android:pivotX="50%" android:pivotY="50%"
android:duration="2000" />
<t>
set標籤中定義的動畫會在同一時間開始運行。。。

六、震動效果

cycle_interpolator是震動動畫渲染器。由於該渲染器未在系統中定義,需要自己編寫cycle_interpolator.xml檔案,並將該檔案放在res\anim目錄中。內容如下:

<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="18" />

android:cycles 表示震動因子。值越大,震動的越劇烈。

下面來建立一個動畫檔案shake.xml。如下:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0" android:toXDelta="10"
android:fromYDelta="0" android:toYDelta="0" android:duration="3000"
android:interpolator="@animcle_interpolator" />

開始震動效果的代碼如下:

animation = AnimationUtils.loadAnimation(this, R.anim.shake);

imageView = (ImageView) findViewById(R.id.shake_image);

imageView.startAnimation(animation);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.