Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android動畫--屬性動畫簡單介紹和基本用法(二)

Android動畫--屬性動畫簡單介紹和基本用法(二)

編輯:關於Android編程

上一篇我們說到的逐幀動畫和補間動畫,這篇我們著重說下屬性動畫:
先看下面兩幅動畫:
這裡寫圖片描述 這裡寫圖片描述
上面兩幅動畫就是通過屬性動畫做出來的,是不是比較炫呢!不僅有顯示,也有交互點擊事件。下面我們一步一步的進行講解:
首先創建一個布局activity_property文件:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">


一:ObjectAnimator對象介紹,在PropretyActivity裡面我們來看下屬性動畫效果

package com.fshsoft.AnimatorDemo;

import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

/**
 * 屬性動畫
 */
public class PropertyActivity extends Activity implements View.OnClickListener {
    private ImageView imageProperty;
    private Button propertyStartBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_property);
        imageProperty = (ImageView) findViewById(R.id.imageProperty);
        propertyStartBtn = (Button) findViewById(R.id.propertyStartBtn);
        imageProperty.setOnClickListener(this);
        propertyStartBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.imageProperty:
                Toast.makeText(this,"圖片點擊事件",Toast.LENGTH_SHORT).show();
                break;
            case R.id.propertyStartBtn:
                //通過ObjectAnimator對象讓動畫在x軸移動
                ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F).setDuration(1000).start();
                break;
            default:
                break;
        }
    }
}

運行效果:
這裡寫圖片描述

屬性動畫,只需要上面的一句話就可以實現,圖片移動之後,點擊圖片有相應的事件,可以進行交互的操作。
接下來繼續在onClick()裡面添加動畫:

//通過ObjectAnimator對象讓動畫在x軸移動
ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F).setDuration(1000).start();
//通過ObjectAnimator對象讓動畫在Y軸移動
ObjectAnimator.ofFloat(imageProperty,"translationY",0F,400F).setDuration(1000).start();
//通過ObjectAnimator對象讓動畫旋轉360度
ObjectAnimator.ofFloat(imageProperty,"rotation",0F,360F).setDuration(1000).start();

運行效果:
這裡寫圖片描述
二:我們還可以使用PropertyValuesHolder來實現相同的效果

PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX",0F,400F);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY",0F,400F);
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation",0F,360F);
ObjectAnimator.ofPropertyValuesHolder(imageProperty,p1,p2,p3).setDuration(1000).start();

運行效果是一樣的,但是它的好處在於提高效率,優化系統資源。

三:下面我們繼續來看AnimatorSet,利用這個對象,我們同樣可以實現上面的效果:

ObjectAnimator animator1 =  ObjectAnimator.ofFloat(imageProperty,"translationX",0F,400F);
ObjectAnimator animator2 =  ObjectAnimator.ofFloat(imageProperty,"translationY",0F,400F);
ObjectAnimator animator3 =  ObjectAnimator.ofFloat(imageProperty,"rotation",0F,360F);
AnimatorSet set = new AnimatorSet();
set.playTogether(animator1,animator2,animator3);
set.setDuration(1000);
set.start();

AnimatorSet給我們提供了更多的方法,set.playTogether();三個同時進行展示動畫,我們更改一下代碼:

//set.playTogether(animator1,animator2,animator3);
set.playSequentially(animator1,animator2,animator3);

set.playSequentially()是按照先後順序依次展示動畫,效果如下:
這裡寫圖片描述

接下來,我們想讓圖片同時在x軸和y軸上運動,然後在旋轉,該怎麼做呢?

//set.playTogether(animator1,animator2,animator3);
//set.playSequentially(animator1,animator2,animator3);
set.play(animator1).with(animator2);
set.play(animator3).after(animator2);

根據字面的意思很顯然用了play().with()這個是同時進行的,
然後再根據play().after()做了剩下的操作
這裡寫圖片描述

四:屬性動畫的點擊事件介紹
創建一個activity_click.xml布沮喎?/kf/yidong/wp/" target="_blank" class="keylink">WPC9wPg0KPHByZSBjbGFzcz0="brush:java;">


然後在ClickActivity裡面:我們通過對ObjectAnimator設置監聽事件addListener(new Animator.AnimatorListener(){}然後重寫四個方法,onAnimationEnd()這個方法裡面我寫了一個Toast,表示動畫結束之後填出對話框信息

package com.fshsoft.AnimatorDemo;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ClickActivity extends Activity implements View.OnClickListener {
    private Button clickBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_click);
        clickBtn = (Button) findViewById(R.id.clickBtn);
        clickBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //設置透明度動畫效果
        ObjectAnimator animator = ObjectAnimator.ofFloat(clickBtn,"alpha",0F,1F);
        animator.setDuration(1000);
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Toast.makeText(ClickActivity.this,"動畫結束顯示信息",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.start();
    }
}

運行如下:
這裡寫圖片描述
一般情況下我們使用onAnimationEnd()這個比較多,就是動畫結束之後彈出Toast,所以我們谷歌給我們提供了AnimatorListenerAdapter(),選擇性的添加重寫的方法,同樣可以實現相同的效果

  animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                Toast.makeText(ClickActivity.this,"動畫結束顯示信息",Toast.LENGTH_SHORT).show();
            }
        });
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved