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