CustomAnim自定义动画

Android只提供了4种基本动画效果,除了可以叠加效果外,我们还可以进行自定义动画。

  • 制作一个随X/Y轴不断变化的平移动画效果
  • 制作一个左右摇晃的动画效果
MainActivity.class不变:

package com.customanim.customanim;

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

public class MainActivity extends Activity {
	
	private CustomAnim ca;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ca = new CustomAnim();
        ca.setDuration(1000);

        findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				arg0.startAnimation(ca);
			}
		});
    }
}


一、平移动画效果:

package com.customanim.customanim;

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

public class CustomAnim extends Animation {
	
	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		
		super.initialize(width, height, parentWidth, parentHeight);
	}
	
	
	@Override
	protected void applyTransformation(
			float interpolatedTime//0-1s时间
			, Transformation t//变化对象
			) {
		t.getMatrix().setTranslate(200*interpolatedTime,//沿X轴变化
                        200*interpolatedTime//沿Y轴变化
                    );
		super.applyTransformation(interpolatedTime, t);
	}
}


二、摇晃动画效果:

package com.customanim.customanim;

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

public class CustomAnim extends Animation {
	
	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		
		super.initialize(width, height, parentWidth, parentHeight);
	}
	
	
	@Override
	protected void applyTransformation(
			float interpolatedTime//0-1s时间
			, Transformation t//变化对象
			) {
	
		/*
		 * 
		  Special cases: 
          sin(+0.0) = +0.0 
          sin(-0.0) = -0.0 
          sin(+infinity) = NaN 
          sin(-infinity) = NaN 
          sin(NaN) = NaN 
          参数:
          d the angle whose sin has to be computed, in radians.
          返回:
          the sine of the argument.
		 */
		t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime*20//控制摇晃的时间/频率
)*50//控制摇晃的距离
), 0);
		
		super.applyTransformation(interpolatedTime, t);
	}
	
}


你可能感兴趣的:(平移,摇晃,自定义动画)