UI設計篇·入門篇·簡單動畫的實現,透明動畫/旋轉動畫/移動動畫/縮放動畫,混合動畫效果的實現,爲動畫設置監聽事件,自定義動畫的方法

基本的動畫構成共有四種:透明動畫/旋轉動畫/移動動畫/縮放動畫。android

配置動畫的方式有兩種,一種是直接使用代碼來配置動畫效果,另外一種是使用xml文檔配置動畫效果app

相比而言,用xml文檔寫出來的動畫效果,寫一次能夠不少次調用,但代碼配置的話則每一次都須要重複配置過程。ide

具體使用代碼:動畫

//這是對一個按鈕設置不一樣的動畫
findViewById(R.id.animation).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //使用代碼配置透明動畫 AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);  //從0到1,表明從徹底透明轉變爲徹底不透明 alphaAnimation.setDuration(1000);                //這個變化的時間一共花費1秒 v.startAnimation(alphaAnimation);                //啓動此animation // 使用XML文檔配置透明動畫 v.startAnimation(AnimationUtils.loadAnimation(Main2Activity.this,R.anim.alphaanimation)); // 使用代碼配置旋轉動畫
        //下面新建的旋轉動畫的意思是從0度旋轉到360度,而旋轉的中心點是相對於自身寬高的一半
RotateAnimation rotateAnimation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); rotateAnimation.setDuration(1000); v.startAnimation(rotateAnimation); // 使用XML文檔配置旋轉動畫 v.startAnimation(AnimationUtils.loadAnimation(Main2Activity.this,R.anim.rotateanimation)); // 使用代碼配置移動動畫 TranslateAnimation translateAnimation = new TranslateAnimation(0,200,0,200);  //從(0,0)移動到(200,200) translateAnimation.setDuration(1000); v.startAnimation(translateAnimation); // 使用代碼配置移動動畫 v.startAnimation(AnimationUtils.loadAnimation(Main2Activity.this,R.anim.translateanimation)); // 使用代碼配置縮放動畫 ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1,0,0);    //按鈕的長和寬的百分比從0縮放到1,縮放的原點在(0,0) scaleAnimation.setDuration(1000); v.startAnimation(scaleAnimation); // 使用XML文檔配置縮放動畫 v.startAnimation(AnimationUtils.loadAnimation(Main2Activity.this,R.anim.scaleanimation)); } });


 

建立動畫XML文檔的方法:this

1.在res目錄文件下,新建XML文件,選擇類型爲animationspa

2.在該文件夾下新建xml文件,用來配置動畫的相關信息設計

透明動畫的xml配置文件:code

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="1000">
</alpha>

 

旋轉動畫的xml配置文件:orm

 

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="1000"
    android:pivotX="50%"
    android:pivotY="50%">
</rotate>

 

移動動畫的xml配置文件:xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="200"
    android:fromYDelta="0"
    android:toYDelta="200"
    android:duration="1000">

</translate>

 

縮放動畫的xml配置文件:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0"
    android:toXScale="1"
    android:fromYScale="0"
    android:toYScale="1"
    android:duration="1000">

</scale>

 

2、混合動畫效果的實現:
1.新建一個animationSet容器,用來儲存各類須要混合的動畫效果數據

2.分別單獨設計混合動畫的各部份內容,而後將每種動畫都添加進animationSet容器

3.經過startAnimation方法啓動混合動畫

實際代碼:

AnimationSet animationSet = new AnimationSet(true);     //true容器內的每一個動畫都被使用

//
透明動畫
AlphaAnimation alphaAnimation = new AlphaAnimation(0,1); alphaAnimation.setDuration(1000); animationSet.addAnimation(alphaAnimation);
//
旋轉動畫 RotateAnimation rotateAnimation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); rotateAnimation.setDuration(1000); animationSet.addAnimation(rotateAnimation);
//
縮放動畫 ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1,0,0); scaleAnimation.setDuration(1000); animationSet.addAnimation(scaleAnimation);
//以上的三種動畫就是上面的簡單動畫的複用 v.startAnimation(animationSet);

使用XML文件配置混合動畫的方法:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="true"
    android:duration="1000">

    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="1000">
    </alpha>
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:duration="1000"
        android:pivotX="50%"
        android:pivotY="50%">
    </rotate>
    <scale
        android:fromXScale="0"
        android:toXScale="1"
        android:fromYScale="0"
        android:toYScale="1"
        android:duration="1000">
    </scale>

</set>

 

爲動畫設置監聽事件:

動畫的監聽事件包含了三個時間的調用方法:動畫開始,動畫重複,動畫結束。

實際代碼:

Animation a = AnimationUtils.loadAnimation(Main2Activity.this,R.anim.multianimation);
a.setAnimationListener(
new Animation.AnimationListener() {   @Override public void onAnimationStart(Animation animation) {   Toast.makeText(getApplicationContext(),"動畫開始",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationEnd(Animation animation) { Toast.makeText(getApplicationContext(),"動畫結束",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationRepeat(Animation animation) { Toast.makeText(getApplicationContext(),"動畫重複調用",Toast.LENGTH_SHORT).show(); } }); v.startAnimation(a);

 

自定義動畫的實現方法步驟:

1.自定義class,繼承Animation

2.根據實際須要重寫父方法,設計代碼實現實際需求

3.經過類名調用(使用方法與系統動畫一致)

實際代碼:

import android.view.animation.Animation;
import android.view.animation.Transformation;

/**
 * Created by Andrew on 2016/7/27.
 */
public class CustomAnimation extends Animation {

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        //這是一個能夠獲取動畫控件的寬高和父容器的寬高的方法
        super.initialize(width, height, parentWidth, parentHeight);
    }

    //須要特別注意的是,此方法是會執行無數次,期間interpolatedTime會從0到1變化無數次,全部動畫的實現基本都與這個數值的變化有關
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        // interpolatedTime 這是一個與動畫運行週期相關的數值,在動畫運行過程當中,它會從0變成1
        // t參數是接受變化的控件對象

        //自定義動畫效果:透明漸變
        t.setAlpha(interpolatedTime);       //因爲interpolatedTime是從0變化到1的,將他的值設置進去技能實現透明度漸變

        //自定義動畫效果:X軸的晃動效果
        t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime)*50),0);


        super.applyTransformation(interpolatedTime, t);
    }
}
相關文章
相關標籤/搜索