//android動畫有補間動畫、逐幀動畫和屬性動畫(支持3.0版本+),本篇博客主要介紹屬性動畫。
定義動畫文件:
//注意:動畫文件要放在 res/animator/ 目錄下
代碼中調用:
ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.anim_scale);animator.setTarget(view);animator.start();
純代碼添加動畫:
ObjectAnimator animation = ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 2.0f);animation.setDuration(1000);animation.start();
定義動畫文件:
代碼中調用:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_multi);set.setTarget(view);set.start();
純代碼添加動畫:
AnimatorSet set = new AnimatorSet();//組合動畫ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1f, 2f);ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1f, 2f);set.setDuration(2000);set.setInterpolator(new DecelerateInterpolator());set.play(scaleX).with(scaleY);//兩個動畫同時開始set.start();
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("translationX", 0f, 300f);PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY", 0f, 300f);ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY);animator.setDuration(2000);animator.start();
//ViewPropertyAnimator在我看來相當于一個view的動畫管理者,調用view.animate()即可獲取。
ViewPropertyAnimator animator = view.animate(); animator.translationX(50).rotationBy(-90).rotation(90).setDuration(1000).start();
多個動畫屬性(PropertyValues)構成一個動畫對象(ObjectAnimator),多個動畫對象(ObjectAnimator)合成一個組合動畫(AnimatorSet)
//在屬性動畫中新增的動畫效果有以下幾種
1)translationX 和 translationY:這兩個屬性控制了View所處的位置,它們的值是由layout容器設置的,是相對于坐標原點(0,0 左上角)的一個偏移量。2)rotation, rotationX 和 rotationY:控制View繞著軸點(pivotX和pivotY)旋轉。3)scaleX 和 scaleY:控制View基于pivotX和pivotY的縮放。4)pivotX 和 pivotY:旋轉的軸點和縮放的基準點,默認是View的中心點。5)x 和 y:描述了view在其父容器中的最終位置,是左上角左標和偏移量(translationX,translationY)的和。6)aplha:透明度,1 是完全不透明,0 是完全透明。
修改view的背景色
/** ArgbEvaluator:這種評估者可以用來執行類型之間的插值整數值代表ARGB顏色。* FloatEvaluator:這種評估者可以用來執行浮點值之間的插值。* IntEvaluator:這種評估者可以用來執行類型int值之間的插值。* RectEvaluator:這種評估者可以用來執行類型之間的插值矩形值。** 由于本例是改變View的backgroundColor屬性的背景顏色所以此處使用ArgbEvaluator*/ObjectAnimator animator = ObjectAnimator.ofInt(view, "backgroundColor", Color.RED, Color.BLUE, Color.GRAY, Color.GREEN);animator.setInterpolator(new DecelerateInterpolator());animator.setDuration(1500);animator.setRepeatCount(-1);animator.setRepeatMode(Animation.REVERSE);animator.setEvaluator(new ArgbEvaluator());animator.start();
//屬性動畫不止可以應用于View,還可以應用于任何對象。
看到上面view變形的時候字體也變了,好不舒服有沒有?屬性動畫的亮點來啦,可以只更改width!
ObjectAnimator.ofInt(view, "width", 800).setDuration(5000).start();
為了在各種安卓版本上使用屬性動畫,你需要采用NineOldAndroids。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com