Android 动画浅谈(二)

自定义动画

创建自定义动画非常简单,只需要实现它的applyTransformation的逻辑就可以了,不过通常情况下,还需要覆盖父类的Initialize方法来实现一些初始化工作,

下面,通过实现一个电视机关机的动画来看一下用法。

效果非常简单,让一个图片纵向比例不断缩小即可,对应的矩阵处理方法如下:

Matrix matrix = t.getMatrix();
       
            matrix.preScale(1, 1-interpolatedTime,halfWidth,halfHeight);
       
 
    

其中,halfWidth 和 halfHeight即为缩放的中心点,设置为图片中心即可,这样通过一个简单的矩阵变换,就可以模拟电视机关闭的动画。

当然,还可以设置更加精确的插值器,并将0到1.0的时间因子拆分成不同的过程,从而对不同的过程采用不同的动画效果,模拟更加真实的特效。

具体实现代码如下:

首先是定义动画类
**TVOffAnimation **

package com.example.administrator.myapplication;

import android.graphics.Matrix;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Transformation;

/**
 * Created by Administrator on 2015/11/26 0026.
 */
public class TVOffAnimation extends Animation {

    private int halfWidth;

    private int halfHeight;

    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {

        super.initialize(width, height, parentWidth, parentHeight);
        setDuration(500);
        setFillAfter(true);
        //保存View的中心点
        halfWidth = width / 2;
        halfHeight = height / 2;
        setInterpolator(new AccelerateDecelerateInterpolator());

    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {

        final Matrix matrix = t.getMatrix();
        if (interpolatedTime < 0.8) {
            matrix.preScale(1+0.625f*interpolatedTime, 1-interpolatedTime/0.8f+0.01f,halfWidth,halfHeight);
        }else{
            matrix.preScale(7.5f*(1-interpolatedTime),0.01f,halfWidth,halfHeight);
        }
    }

}

然后,是Activity调用
MyTvAnimationActivity

package com.example.administrator.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

/**
 * Created by Administrator on 2015/11/26 0026.
 */
public class MyTvAnimationActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tvmain);
        Button b = (Button) findViewById(R.id.Button01);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                View img = findViewById(R.id.ImageView01);
                img.startAnimation(new TVOffAnimation());
            }
        });
    }
    }


效果图如下所示:


Android 动画浅谈(二)_第1张图片
这里写图片描述

更多效果,就需要慢慢探索了。。。。

你可能感兴趣的:(Android 动画浅谈(二))