哈哈哈!話不多說,讓我們進入屬性動畫的世界,感受安卓屬性動畫的神奇吧!
好多效果! 咱們先看第一種
主要效果:
代碼:
public class Main2Activity extends AppCompatActivity {
ImageView image;
My_View_1 myView1;
My_View_2 myView2;
int flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
chushihua();
donghua();
}
private void donghua() {
ObjectAnimator objectAnimator1;
ObjectAnimator objectAnimator11;
ObjectAnimator objectAnimator111;
ObjectAnimator objectAnimator1111;
if(flag%2==0){
myView2.setVisibility(View.INVISIBLE);
myView1.setVisibility(View.VISIBLE);
objectAnimator1 = ObjectAnimator.ofFloat(myView1, "Rotation", 0,360);
objectAnimator11 = ObjectAnimator.ofFloat(myView1, "translationY", 0,-400,0);
objectAnimator111 = ObjectAnimator.ofFloat(image, "ScaleX", 1,0.5f,1);
objectAnimator1111 = ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
}else{
myView1.setVisibility(View.INVISIBLE);
myView2.setVisibility(View.VISIBLE);
objectAnimator1 = ObjectAnimator.ofFloat(myView2, "Rotation", 0,360);
objectAnimator11 = ObjectAnimator.ofFloat(myView2, "translationY", 0,-400,0);
objectAnimator111 = ObjectAnimator.ofFloat(image, "ScaleX", 1,0.5f,1);
objectAnimator1111 = ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
}
AnimatorSet set=new AnimatorSet();
set.play(objectAnimator1).with(objectAnimator11).with(objectAnimator111).with(objectAnimator1111);
set.setDuration(1000);
set.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
flag++;
donghua();
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
set.start();
}
private void chushihua() {
image=findViewById(R.id.img);
myView1=findViewById(R.id.v1);
myView2=findViewById(R.id.v2);
}
}
這個動畫,主要是以,組合動畫實現
ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
//這是簡單的縮放動畫
//1爲原始大小縮放到0.5在放大到(原始大小)
動畫豐富多彩,各是各樣,接下來我們就開始學習動畫的類型
旋轉動畫:Rotation
平移動畫:translationX,translationY
縮放動畫:Scale
透明動畫:Alpha
背景動畫:BackgroundColor
插值器:
AccelerateDecelerateInterpolator//在動畫開始與結束的地方速率改變比較慢,在中間的時候加速
AccelerateInterpolator//在動畫開始的地方速率改變比較慢,然後開 始加速
AnticipateInterpolator//開始的時候向後然後向前甩
AnticipateOvershootInterpolator//開始的時候向後然後向前甩一定值後返回最 後的值
BounceInterpolator//動畫結束的時候彈起
CycleInterpolator//動畫循環播放特定的次數,速率改變沿着正 弦曲線
DecelerateInterpolator//在動畫開始的地方快然後慢
LinearInterpolator//以常量速率改變
OvershootInterpolator//向前甩一定值後再回到原來位置
(內容省略了valueAnimator和PropertyValueHolder使用)
屬性動畫的使用的主要方式是AnimatorSet和ObjectAnimator配合使用.ObjectAnimator控制一個對象和一個屬性,多個ObjectAnimator組合到AnimatorSet可以實現豐富的動畫效果.
一.ObjectAnimator單獨使用
ObjectAnimator mobjectAnimator=ObjectAnimator.ofFloat(view,"translationX",200);
mobjectAnimator.setDuration(300);
mobjectAnimator.start();
除了設置時長以外,還可以設置插值器.其可以常用的直接使用的屬性動畫屬性值有:
translationX,translationY//平移
rotation,rotationX,rotationX//旋轉
PrivotX,PrivotY//支點
alpha//透明度
x,y//View最終位置
二.監聽動畫過程
mobjectAnimator.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) {
}
});
三.組合動畫
AnimatorSet使用play(Animator anim)傳入動畫
//第一個參數:改變的控件 第二個參數 改變的顏色 第三個參數:開始的顏色 第四個參數:結束的顏色
ObjectAnimator objectAnimator =ObjectAnimator.ofArgb(tv, backgroundColor,Color.BLUE,Color.RED);
set.setDuration(2000);
set.start();
並且通過以下方法插入新動畫:
after(Animator anim)
after(long delay)//延遲指定毫秒後執行
with(Animator anim)
before(Animator anim)
ObjectAnimator Animator1 = ObjectAnimator.ofFloat(view, "translationX", 200,-100);
ObjectAnimator Animator2 = ObjectAnimator.ofFloat(view, "ScaleX", 1.0f, 2.0f);
ObjectAnimator Animator3 = ObjectAnimator.ofFloat(view, "rotationX", 0.0f, 90.0f);
AnimatorSet set=new AnimatorSet();
set.setDuration(2000);
set.play(Animator1).with(Animator2).after(Animator3);
set.start();
練習:大家可以試着思考一下,這幾個加載動畫如何實現
小米視頻加載動畫
別的加載動畫