«

Android动画分类及编写方式(view Animation/Tween Animation)视图动画(一个对象的变形)

时间:2024-3-2 19:32     作者:韩俊     分类: Android


Android动画分类

1.Property Animation属性动画

viewAnimation

objectAnimation

2.View Animation/Tween Animation视图动画

AlphaAnimation 渐变动画

RotateAnimation旋转动画

ScaleAnimation缩放动画

TranslateAnimation位移动画

3.Drawable Animation/Frame Animation图片动画,一帧一帧的动画

下面主要是对视图动画的代码编写和讲解

(1) main.xml主要代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <ImageView
            android:id="@+id/imageViewAnim"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            />
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Alpha"
            android:id="@+id/buttonAlpha"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Rotate"
            android:id="@+id/buttonRotate"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scale"
            android:id="@+id/buttonScale"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Translate"
            android:id="@+id/buttonTranslate"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Complex"
            android:id="@+id/buttonComplex"/>
</LinearLayout>
(2)AnimationDemoActivity主要代码
package com.ncsyeyy.Animation;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.*;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.Button;

public class AnimationDemoActivity extends Activity {

    private ImageView ivAnim;
    private Button btAlpha;
    private Button btRotate;
    private Button btScale;
    private Button btTranslate;
    private Button btComplex;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btAlpha = (Button) findViewById(R.id.buttonAlpha);
        btAlpha.setOnClickListener(new AnimationClickListener(AnimationType.Alpha));
        btRotate = (Button) findViewById(R.id.buttonRotate);
        btRotate.setOnClickListener(new AnimationClickListener(AnimationType.Rotate));
        btScale = (Button) findViewById(R.id.buttonScale);
        btScale.setOnClickListener(new AnimationClickListener(AnimationType.Scale));
        btTranslate = (Button) findViewById(R.id.buttonTranslate);
        btTranslate.setOnClickListener(new AnimationClickListener(AnimationType.Translate));
        btComplex = (Button) findViewById(R.id.buttonComplex);
        btComplex.setOnClickListener(new AnimationClickListener(AnimationType.Complex));
        ivAnim = (ImageView) findViewById(R.id.imageViewAnim);

    }

    //    定义枚举
    enum AnimationType {
        Alpha,
        Rotate,
        Scale,
        Translate,
        Complex
    }

    class AnimationClickListener implements View.OnClickListener {
        private AnimationType animationType;//动画类型

        //        定义构造函数
        public AnimationClickListener(AnimationType animType) {
            animationType = animType;
        }

        @Override
        public void onClick(View v) {
            switch (animationType) {

//                Alpha渐变动画
                case Alpha:

//                    方法一:在activity中设置动画效果
// 构造方法:AlphaAnimation(float fromAlpha, float toAlpha)从哪个透明度到哪个透明度,范围在0~1之间,0表示透明,1表示不透明,f表明是浮点型数
//                定义动画
//                    AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0.1f);
////                    设置动画时间长短
//                    alphaAnimation.setDuration(3000);
//                    alphaAnimation.setRepeatCount(3);
////                    完成动画停留在结束的时候
////                    animation.setFillAfter(true);
////                    设置动画的循环模式
//                    alphaAnimation.setRepeatMode(Animation.REVERSE);//反向循环
////设置监听事件
//                    alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
//
//                        @Override
//                        public void onAnimationStart(Animation animation) {
//                            Log.i("sundylog", "animation started");
//                        }
//
//                        @Override
//                        public void onAnimationEnd(Animation animation) {
//                            Log.i("sundylog", "animation end");
//                        }
//
//                        @Override
//                        public void onAnimationRepeat(Animation animation) {
//                            Log.i("sundylog", "animation repeat");
//                        }
//                    });
////                   启动动画
//                    ivAnim.startAnimation(alphaAnimation);

                    /*
                    第二种方法:效果同第一种方法是一样的
                    from xml 动画的配置,默认文件路径/res/anim/animation.xml
                    在activity中引用
                     */
                    AlphaAnimation _alph=(AlphaAnimation) AnimationUtils.loadAnimation(AnimationDemoActivity.this, R.anim.animation);
                   ivAnim.startAnimation(_alph);
                    break;

//                Rotate旋转动画
//                【基本语法】public RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//                参数说明
//                fromDegrees:旋转的开始角度。
//                toDegrees:旋转的结束角度。
//                pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
//                pivotXValue:X坐标的伸缩值。
//                pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
//                pivotYValue:Y坐标的伸缩值。
                case Rotate:
                    RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1f);
                    rotateAnimation.setDuration(3000);
                    rotateAnimation.setRepeatCount(3);
                    ivAnim.startAnimation(rotateAnimation);
                    break;

//                Scale缩放动画
//                【基本语法】public ScaleAnimation (float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//                参数说明
//                fromX:起始X坐标上的伸缩尺寸。
//                toX:结束X坐标上的伸缩尺寸。
//                fromY:起始Y坐标上的伸缩尺寸。
//                toY:结束Y坐标上的伸缩尺寸。
//                pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
//                pivotXValue:X坐标的伸缩值。
//                pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
//                pivotYValue:Y坐标的伸缩值。
                case Scale:
                    ScaleAnimation scaleAnimation = new ScaleAnimation(1, 1.5f, 1, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                    scaleAnimation.setDuration(3000);
                    scaleAnimation.setRepeatCount(3);
                    ivAnim.startAnimation(scaleAnimation);
//                    如何设置前面的按钮不遮挡住放大后的效果?
                    break;

//                Translate位移动画
//                TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue)
//                这四个参数一般用 Animation.RELATIVE_TO_PARENT,Animation.RELATIVE_TO_SELF就够了
//                Animation.RELATIVE_TO_PARENT:就是以父viewGroup的高度或宽度作为参考。
//                Animation.RELATIVE_TO_SELF:就是以自己 的高度或宽度作为参考。
//                fromXValue,toXValue,fromYValue,toYValue这四个就是x,y的移动起点和终点。
                case Translate:
                    TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
                    translateAnimation.setDuration(3000);
                    translateAnimation.setRepeatCount(3);
                    ivAnim.startAnimation(translateAnimation);
                    break;

//                AnimationSet动画集,可以把以上的动画效果都设置进去
case Complex:
    AnimationSet setA=new AnimationSet(false);
    AlphaAnimation alphaAnimation1 = new AlphaAnimation(1f, 0.1f);
//                    设置动画时间长短
    alphaAnimation1.setDuration(3000);
//    alphaAnimation1.setRepeatCount(3);
//                    完成动画停留在结束的时候
//                    animation.setFillAfter(true);
//                    设置动画的循环模式
    alphaAnimation1.setRepeatMode(Animation.REVERSE);//反向循环

    RotateAnimation rotateAnimation2 = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1f);
    rotateAnimation2.setDuration(3000);
//    rotateAnimation2.setRepeatCount(3);

    TranslateAnimation translateAnimation3 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
    translateAnimation3.setDuration(3000);
//    translateAnimation3.setRepeatCount(3);
//动画添加进去
    setA.addAnimation(alphaAnimation1);
    setA.addAnimation(rotateAnimation2);
    setA.addAnimation(translateAnimation3);
    ivAnim.startAnimation(setA);
    break;
                default:
                    break;
            }

        }
    }

}

(3)动画的配置,路径/res/anim/animation.xml

在(2)中方法二的配置引用xml文件,其中方法一时在activity中设置你所想要的动画效果

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


总结:(1)定义对象动画

(2)启动动画对象



版权声明:本文为博主原创文章,未经博主允许不得转载。

标签: android

热门推荐