android自定义补间动画

本文介绍了一个自定义动画类MyAnimation的实现方式,该类继承自Animation,并实现了初始化和动画帧更新的方法。通过调整interpolatedTime参数,在X、Y、Z轴上实现位置变化和旋转效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MyAnimation extends Animation {
	private int centerX;
	private int centerY;
	private int duration;
	private Camera camera = new Camera();
	public MyAnimation(int centerX, int centerY, int duration) {
		this.centerX = centerX;
		this.centerY = centerY;
		this.duration = duration;
	}
	
	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		super.initialize(width, height, parentWidth, parentHeight);
		setDuration(duration);
		setFillAfter(true);
		setInterpolator(new LinearInterpolator());
	}
 /**	<p><span style="color:rgb(63,127,95);">  *该方法的interpolatedTime代表了抽象的动画持续时间,不管动画实际持续时间多长,</span></p><p><span style="color:rgb(63,127,95);"> * interpolatedTime参数总是从0(动画开始时)~1(动画结束时)</span></p><p><span style="color:rgb(63,127,95);"> * Transformation参数代表了对目标组件所做的变.</span></p>*/
	@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		super.applyTransformation(interpolatedTime, t);
		
		camera.save();
		//根据interpolatedTime时间来控制x,y,z轴上的偏移
		camera.save();
		//根据interpolatedTime时间来控制X、Y、Z上的偏移
		camera.translate(100.0f - 100.0f * interpolatedTime ,
			150.0f * interpolatedTime - 150 ,
			80.0f - 80.0f * interpolatedTime);
		// 设置根据interpolatedTime时间在Y柚上旋转不同角度。
		camera.rotateY(360 * (interpolatedTime));
		// 设置根据interpolatedTime时间在X柚上旋转不同角度
		camera.rotateX((360 * interpolatedTime));
		//获取Transformation参数的Matrix对象
		Matrix matrix = t.getMatrix();
		camera.getMatrix(matrix);
		matrix.preTranslate(-centerX, -centerY);
		matrix.postTranslate(centerX, centerY);
		camera.restore();
		
	}
	
}

   其次是MainActivity

ListView listView = (ListView) findViewById(R.id.listView1);
		WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
		Display display = manager.getDefaultDisplay();
		int width = display.getWidth();
		int height = display.getHeight();
		listView.setAnimation(new MyAnimation(width/2,height/2,8000));





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值