本來想先放實現效果,後來手機實在捉急,只能後續再補啦。
一 實現透明效果:
//屬性動畫變透明
private void alphaAnim(){
//不透明--->透明--->不透明 2s鍾時間平均分配
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f,1f);
//從不透明變成透明
// ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);
//只執行一次動畫時,可以省略1f
// ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",0f);
objectAnimator.setDuration(2000); //設置動畫時間爲2000ms
objectAnimator.start();
}
1f爲完全不透明 0f爲完全透明
二:實現旋轉效果
//屬性動畫 旋轉
private void rotationAnim(){
//0-->360 順時針 360-->0 逆時針
//下個度數大於上個度數,順時針旋轉;下個度數小於上個度數,逆時針旋轉。
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"rotation",0f,360,0);
objectAnimator.setDuration(5000);
objectAnimator.start();
}
三 實現平移效果:
//平移
private void translationAnim(){
// translationX 沿着x軸移動 上個數大於下個數,左移。反之右移
// ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationX",0f,-300f,0f); //左移-->右移
// translationX 沿着x軸移動 上個數大於下個數,上移。反之下移
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationY",0f,300f,0f); //下移-->上移
objectAnimator.setDuration(5000);
objectAnimator.start();
}
四 實現縮放效果
//縮放
private void scaleAnim(){
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"scaleX",1f,2f,1f); //沿着x軸放大兩倍再返回
ObjectAnimator objectAnimator1=ObjectAnimator.ofFloat(imageView,"scaleY",1f,2f,1f); //沿着Y軸放大兩倍再返回
objectAnimator.setDuration(5000);
objectAnimator1.setDuration(5000);
objectAnimator.start();
objectAnimator1.start();
}
五 組合動畫
以上都是基本動畫,如果只有基本動畫,顯然是不夠的,所以還有個類AnimatorSet,專門來組合這些動畫。
AnimatorSet:這個類提供了一個play()方法,調用後將會返回一個AnimatorSet.Builder的實例,AnimatorSet.Builder中包括以下四個方法:
after(Animator anim) :將現有動畫插入到傳入的動畫之後執行
after(long delay) :將現有動畫延遲指定毫秒後執行
before(Animator anim): 將現有動畫插入到傳入的動畫之前執行
with(Animator anim) :將現有動畫和傳入的動畫同時執行
//組合動畫
private void setAnim(){
//沿x軸放大
ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);
//沿y軸放大
ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 2f, 1f);
//移動
ObjectAnimator translationXAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0f, 200f, 0f);
//透明動畫
ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
AnimatorSet animatorSet=new AnimatorSet();
//同時沿X,Y軸放大,且改變透明度,然後移動
//在3s內,沿x、y軸同時放大,然後縮小,在縮放的同時還要改變透明度。然後再完成3s的左右移動。
animatorSet.play(scaleXAnimator).with(scaleYAnimator).with(alphaAnimator).before(translationXAnimator);
//每個動畫都設置成3s,也可以分別設置
animatorSet.setDuration(3000);
animatorSet.start();
}
六 在xml中實現動畫效果
1.透明:
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="alpha"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueFrom="0.5"
android:valueTo="1"
android:valueType="floatType">
<!--
android:duration:動畫持續時間;
android:propertyName:動畫類型;
android:repeatCount:重複次數,-1爲一直重複;
android:repeatMode:重複模式:reverse(從結束的位置繼續), restart(從新開始);
android:valueFrom:起始值;
android:valueTo:結束值。
android:valueType:值類型
-->
</objectAnimator>
在佈局中的實現:
//alpha.xml對應的代碼實現
private void alphaXml(){
Animator animator= AnimatorInflater.loadAnimator(this,R.animator.alpha);
animator.setTarget(imageView);
animator.start();
}
2.旋轉
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueFrom="0"
android:valueTo="360"
android:duration="2000"
android:propertyName="rotation"
android:valueType="floatType"/>
3.移動
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="translationX"
android:repeatCount="-1"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="200"
android:valueType="floatType"/>
4.縮放:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="scaleX"
android:valueFrom="1"
android:valueTo="1.5"
android:valueType="floatType" />
5.組合:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<set>
<objectAnimator
android:duration="4000"
android:propertyName="rotation"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="360" />
<set android:ordering="sequentially">
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="200" />
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:repeatMode="reverse"
android:valueFrom="200"
android:valueTo="0" />
</set>
</set>
<set >
<objectAnimator
android:duration="4000"
android:propertyName="rotation"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="360" />
<set android:ordering="sequentially">
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:repeatMode="reverse"
android:valueFrom="0"
android:valueTo="-200" />
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:repeatMode="reverse"
android:valueFrom="-200"
android:valueTo="0" />
</set>
</set>
</set>
這裏需要說下set中的屬性android:ordering:規定了這個set中的動畫的執行順序,包括:
together(默認):set中的動畫同時執行
sequentially:set中的動畫按順序執行
好啦,屬性動畫的需求,這些基本就滿足啦,嘿嘿。
參考博客:https://www.jianshu.com/p/d23f58f4368d