Android-視圖動畫

1) AlphaAnimation

代碼實現AlphaAnimation

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.aa_fragment,container,false);

root.findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
            AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(2000);
v.startAnimation(aa);
}
    });
    return root;
}

XML實現AlphaAnimation

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.aa_fragment,container,false);

root.findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//xml實現alphaAnimation
v.startAnimation(AnimationUtils.loadAnimation(getActivity(),R.anim.aa));
}
    });
    return root;
}

res/anim/aa.xml

<?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>

2) RotateAnimation
代碼實現RotateAnimation

root.findViewById(R.id.btnRotateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//              RotateAnimation ra = new RotateAnimation(0,360,100,100);//0表示初始旋轉角度,360表示終止旋轉角度,100是z座標像素和y座標像素,

                //相對自身旋轉,0.5f 爲百分比,相對於自身的50%
RotateAnimation ra = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

ra.setDuration(1000);
v.startAnimation(ra);

}
        });

XML 實現RotateAnimation

v.startAnimation(AnimationUtils.loadAnimation(getActivity(),R.anim.ra));

R.anim.ra.xml

<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%"/>

3) TranslateAnimation
代碼實現:

root.findViewById(R.id.btnTranslateMe).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
        TranslateAnimation ta = new TranslateAnimation(0,200,0,0);//0相對於自身位置
ta.setDuration(1000);
v.startAnimation(ta);
}
});

xml實現

root.findViewById(R.id.btnTranslateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//                TranslateAnimation ta = new TranslateAnimation(0,200,0,0);//0相對於自身位置
//                ta.setDuration(1000);
//                v.startAnimation(ta);
v.startAnimation(AnimationUtils.loadAnimation(getActivity(),R.anim.ta));
}
        });

R.anim.ta.xml:

<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="0"
android:duration="1000"/>

4) ScaleAnimation
代碼實現:

root.findViewById(R.id.btnScaleMe).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
//默認左上角開始縮放,可以設成中心點縮放
ScaleAnimation sa = new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
sa.setDuration(1000);
v.startAnimation(sa);
}
});

xml實現:

root.findViewById(R.id.btnScaleMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//                //默認左上角開始縮放,可以設成中心點縮放
//                ScaleAnimation sa = new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//                sa.setDuration(1000);
//                v.startAnimation(sa);

v.startAnimation(AnimationUtils.loadAnimation(getActivity(),R.anim.sa));
}
        });

R.anim.sa.xml

<scale xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1"
android:toYScale="1"
android:pivotY="50%"
android:pivotX="50%"
android:duration="1000"
/>

5) 混合動畫效果(兩個動畫效果同時啓動),也可以設置分別啓動
代碼實現:

root.findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        AnimationSet as = new AnimationSet(true);
as.setDuration(2000);

AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(2000);
as.addAnimation(aa);

TranslateAnimation ta = new TranslateAnimation(200,0,200,0);
ta.setDuration(2000);
as.addAnimation(ta);

v.startAnimation(as);
}
});

XML實現

root.findViewById(R.id.btnAnimateMe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//                AnimationSet as = new AnimationSet(true);
//                as.setDuration(2000);
//
//                AlphaAnimation aa = new AlphaAnimation(0,1);
//                aa.setDuration(2000);
//                as.addAnimation(aa);
//
//                TranslateAnimation ta = new TranslateAnimation(200,0,200,0);
//                ta.setDuration(2000);
//                as.addAnimation(ta);
//
//                v.startAnimation(as);

v.startAnimation(AnimationUtils.loadAnimation(getActivity(),R.anim.as));
}
        });

R.anim.as.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000"
android:shareInterpolator="true">
    <alpha
android:fromAlpha="0"
android:toAlpha="1" />
    <translate
android:fromXDelta="200"
android:fromYDelta="200"
android:toXDelta="0"
android:toYDelta="0" />
</set>

6) 偵聽動畫的效果:

Animation a = AnimationUtils.loadAnimation(getActivity(), R.anim.as);
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//動畫開始時
}

@Override
public void onAnimationEnd(Animation animation) {
        Toast.makeText(getContext(),"Animatioin End",Toast.LENGTH_SHORT).show();
//動畫結束時
}

@Override
public void onAnimationRepeat(Animation animation) {
//動畫重複時
}
});
v.startAnimation(a);

7) 自定義動畫效果:

->定義CustomAnimation extends Animation
->重寫applyTransformation()

protected void applyTransformation(float interpolatedTime, Transformation t) {


//        t.setAlpha(interpolatedTime);

if (interpolatedTime < 0.5) {
            t.getMatrix().setTranslate(500 * interpolatedTime, 0);
countX = 500 * interpolatedTime;
} else {
countY = interpolatedTime - 0.5f;
t.getMatrix().setTranslate(countX, countY * 300);

}

//        t.getMatrix().setTranslate((float) (Math.rint(interpolatedTime*10)*10),0);

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