Android Property Animation 介紹(二)

本文將介紹property Animator的具體使用。同其餘的動畫實現同樣,也支持xml設置和代碼設置,也可以實現一組動畫的執行。java

來看下實例android

xml的,android推薦在res/animator/目錄下定義xml文件具體以下函數

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="scaleX"
    android:duration="2000"
    android:valueFrom="1.0"
    android:valueTo="2.0"
    android:repeatCount="1"
    android:repeatMode="reverse"
    />

能夠看到使用的動畫類是ObjectAnimator,定義的動畫特性有duration持續時間爲2000ms,repeatCount重試次數爲1次,repeatMode重試模式爲reverse倒退。propertyName修改的屬性爲scaleX,valueFrom,valueTo,此時表示從比例1到比例2動畫

若是想要執行一組動畫以下:
spa

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="scaleX"
        android:duration="2000"
        android:valueFrom="1.0"
        android:valueTo="2.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />

    <objectAnimator
        android:propertyName="scaleY"
        android:duration="2000"
        android:valueFrom="1.0"
        android:valueTo="2.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

代碼中設置動畫code

設置單個動畫的代碼xml

scaleXAnimator = new ObjectAnimator();
        scaleXAnimator.setTarget(textView);
        scaleXAnimator.setPropertyName("scaleX");
        scaleXAnimator.setDuration(2000);
        scaleXAnimator.setRepeatCount(1);
        scaleXAnimator.setRepeatMode(ValueAnimator.REVERSE);
        scaleXAnimator.setFloatValues(1,2);

設置一組動畫的代碼對象

 set = new AnimatorSet();
        scaleXAnimator = new ObjectAnimator();
        scaleXAnimator.setTarget(textView);
        scaleXAnimator.setPropertyName("scaleX");
        scaleXAnimator.setDuration(2000);
        scaleXAnimator.setRepeatCount(1);
        scaleXAnimator.setRepeatMode(ValueAnimator.REVERSE);
        scaleXAnimator.setFloatValues(1, 2);

        scaleYAnimator = ObjectAnimator.ofFloat(textView,"scaleY",1,2);
        scaleYAnimator.setDuration(2000);
        scaleYAnimator.setRepeatCount(1);
        scaleYAnimator.setRepeatMode(ValueAnimator.REVERSE);

        set.playTogether(scaleXAnimator,scaleYAnimator);

還能夠其餘的方式來同時改變多個屬性接口

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();

    或是使用ViewPropertyAnimator事件

myView.animate().x(50f).y(100f);

還能夠設置插值經過調用setInterpolator方法,android已經定義了一些插值器

AccelerateInterpolator:加速,開始慢中間加速

DecelerateInterpolator:減速,開始時塊而後減速

AccelerateDecelerateInterolator:先加速後減速,開始結束時慢,中間加速

AnticipateInterpolator:反向,先向相反方向執行一段再加速播放

AnticipateOvershootInterpolator:反向加回彈,先向相反方向改變,再加速播放,會超出目的值而後緩慢移動到目的值

BounceInterpolator:跳躍,快到目的值會跳躍,如目的值100.後面值可能依次爲85,77,70,80,90,100

CycleIinterpolator:循環,動畫循環必定次數,值得改變爲宜正弦函數Math.sin(2*mCycles*Math.PI*input)

LinearInterpolator:線性,線性均勻改變

OvershottInterpolator:回彈,最後超出目的值而後緩慢改變到目的值

TimeInterpolator:一個接口,容許你自定義interpolator,以上都是實現了這個接口。

ViewGroup中的layout的動畫

與view動畫同樣,property動畫系統對Viewgroup對象的動畫顯示提供了支持。你能夠用LayoutTransition類來動畫顯示Viewgroup中的layout。經過把View加入或移出ViewGroup,或者以VISIBLE、INVISIBLE、GONE調用View的setVisibility()方法,能夠實現某個View的顯現和消息效果。當你添加或刪除View時,ViewGroup中的其餘View也能夠用動畫的方式移動到新的位置顯示。你能夠調用LayoutTransition對象的setAnimator()方法來定義下載動畫方式。調用參數是Animator對象和如下LayoutTransition常量:

APPEARING:元素在容器中顯現時須要動畫顯示

CHANGE_APPEARING:因爲容器中藥顯示一個新的元素,其餘元素的變化須要動畫顯示

DISAPPEARING:元素在容器中消息時須要動畫顯示

CHANGE_DISAPPEARING:因爲容器中某個元素要消失,其餘元素的變化須要動畫顯示

你能夠爲這4種事件定義本身的動畫方式,已便定製layout變化時的外觀,也能夠只是通知動畫系統採用默認的動畫方式。在xml中你只要爲ViewGroup的android:animateLayoutchanges屬性設爲true,將會自動把view加入和移出的過程已動畫方式顯示,ViewGroup中其餘的View同時也會以動畫方式進行調整。

相關文章
相關標籤/搜索