安卓中的屬性動畫之高級進階

哈哈哈!話不多說,讓我們進入屬性動畫的世界,感受安卓屬性動畫的神奇吧!

好多效果! 咱們先看第一種

主要效果:

 

主要效果

代碼:

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();

 練習:大家可以試着思考一下,這幾個加載動畫如何實現

 小米視頻加載動畫

別的加載動畫

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章