Android幀動畫、補間動畫、屬性動畫用法詳解_Android

來源:互聯網
上載者:User

在安卓開發中,經常會使用到一些動畫,那麼在開發中,如何使用這些動畫呢?

幀動畫:不是針對View做出一些形狀上的變化,而是用於播放一張張的圖片,例如一些開機動畫,類似於電影播放,使用的是AnimationDrawable來播放幀動畫
res/drawable 

<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="true"   >      <item android:drawable="@drawable/g1" android:duration="200"></item>   <item android:drawable="@drawable/g2" android:duration="200"></item>   <item android:drawable="@drawable/g3" android:duration="200"></item>   <item android:drawable="@drawable/g4" android:duration="200"></item>   <item android:drawable="@drawable/g5" android:duration="200"></item>  </animation-list> 
ImageView iv = (ImageView) findViewById(R.id.iv); iv.setBackgroundDrawable(getResources().getDrawable(R.drawable.frame_anim));      AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();      //設定是否只執行一次 //animationDrawable.setOneShot(false);      animationDrawable.start(); 

補間動畫(View動畫):如果View只做一些動畫,並不對View做點擊或觸控的一些操作,可以使用補間動畫,因為View動畫,並不會改變View的位置,只是做一些渲染。View動畫的四種變換效果對應著Animation的四個子類:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation.

// 以view中心為縮放點,由初始狀態縮小到看不間在返回到看見     ScaleAnimation animation = new ScaleAnimation(         1.0f, 0.0f,//一點點變小直到看不見為止         1.0f, 0.0f,         Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f//中間縮放     );     animation.setDuration(BUBBLE_ENTER_CENTER_SCALE_TIME);     animation.setRepeatMode(Animation.REVERSE);     animation.setRepeatCount(1);     animation.setAnimationListener(new Animation.AnimationListener() {       @Override       public void onAnimationStart(Animation animation) {       }        @Override       public void onAnimationEnd(Animation animation) {          homingBubbleView(true,position,view, current, endRatioFrame);       }        @Override       public void onAnimationRepeat(Animation animation) {       }     });     view.startAnimation(animation); 

屬性動畫:API11新特性,如果對View不僅做一些動畫操作,也對View做一些點擊觸摸的操作,可以使用屬性動畫,因為屬性動畫會改變View的位置。屬性動畫類有ValueAnimator、ObjectAnimator、AnimatorSet。

下面就來介紹一下兩個屬性動畫

ValueAnimator值動畫,它並不是用於對View做一些動畫,它僅僅是用於兩個值之間的一個過度的動畫(按照時間將兩個差值平分,然後根據時間來一點點的往上加),系統提供了一些ValueAnimator.ofInt()、ValueAnimator.ofFloat()用於整型和浮點型的兩隻之間的過度動畫,如果兩個值是自己自訂的類型該怎麼辦呢?安卓提供了一個ValueAnimator.ofObject()方法,其中一個參數是TypeEvaluator類型(類型估算器),TypeEvaluator是一個介面,給開發人員的一個擴充,介面中有一個public Object evaluate(float fraction, Object startValue, Object endValue) 方法,該方法會在ValueAnimator動畫期間不斷的調用,fraction是0-1之間的變動率,startValue是(自訂類型的)開始值,endValue是(自訂類型的)結束值,傳回型別就是自訂的類型,可以根據自己的需求來自行計算期間的值該如何變化(如可以是運行軌跡)

public class FloatEvaluator implements TypeEvaluator {    public Object evaluate(float fraction, Object startValue, Object endValue) {      float startFloat = ((Number) startValue).floatValue();      return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);    }    

使用

ValueAnimator mAnimatorEnetr = ValueAnimator.ofObject(new FloatEvaluator(getContext()), 0,10);       mAnimatorEnetr.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {         @Override         public void onAnimationUpdate(ValueAnimator animation) {           (Float) animation.getAnimatedValue();//這裡就是返回不斷變化的值                    }       });       mAnimatorEnetr.setDuration(1000);       mAnimatorEnetr.addListener(new Animator.AnimatorListener() {         @Override         public void onAnimationStart(Animator animation) {          }          @Override         public void onAnimationEnd(Animator animation) {                    }          @Override         public void onAnimationCancel(Animator animation) {          }          @Override         public void onAnimationRepeat(Animator animation) {          }       });       mAnimatorEnetr.start(); 

ObjectAnimator動畫,它是針對view來做一些屬性上值得變化,它不僅在值上有一個過度的變化,而且還會將變化的值設定到所要改變的屬性上,讓其產生動畫的效果
ObjectAnimator.ofInt(view,"translationX",10,20).setDuration(100).start(); 參數view是要產生動畫的view,"translationX"屬性,後面的參數是變化的區間
ObjectAnimator做屬性動畫的時候,並不會改變view的left,top,right,bottom值,它改變的只是translationX和translationY的值,這些參數值的關係是 x = left + translationX  , y = top + translationY。在平移過程中,只會改變x 和translationX ,y和translatioinY的值。其中x和y是View左上方的座標。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.