android 方块平移动画,android – 在Surface View中动画和旋转图像

手动旋转图像可能有点痛苦,但这就是我如何做到的.

private void animateRotation(int degrees,float durationOfAnimation){

long startTime = SystemClock.elapsedRealtime();

long currentTime;

float elapsedRatio = 0;

Bitmap bufferBitmap = carBitmap;

Matrix matrix = new Matrix();

while (elapsedRatio < 1){

matrix.setRotate(elapsedRatio * degrees);

carBitmap = Bitmap.createBitmap(bufferBitmap,width,height,matrix,true);

//draw your canvas here using whatever method you've defined

currentTime = SystemClock.elapsedRealtime();

elapsedRatio = (currentTime - startTime) / durationOfAnimation;

}

// As elapsed ratio will never exactly equal 1,you have to manually draw the last frame

matrix = new Matrix();

matrix.setRotate(degrees);

carBitmap = Bitmap.createBitmap(bufferBitmap,true);

// draw the canvas again here as before

// And you can now set whatever other notification or action you wanted to do at the end of your animation

}

这会将carBitmap旋转到指定绘制最后一帧的时间指定的任何角度.然而,有一个问题.这会旋转您的carBitmap而不会正确调整其在屏幕上的位置.根据您绘制位图的方式,最终可能会在位图的左上角保持原位时旋转carBitmap.随着汽车的旋转,位图将拉伸并调整以适应新的汽车尺寸,用透明像素填充其周围的空隙.很难描述它的外观,所以这是一个旋转方块的例子:

灰色区域表示位图的完整大小,并填充透明像素.要解决此问题,您需要使用三角函数.它有点复杂…如果这最终成为你的问题(我不知道你是如何将你的位图绘制到画布上所以它可能不是),你无法解决问题,让我知道,我会发布我是如何做到的.

(我不知道这是否是最有效的方法,但只要位图小于300×300左右,它就能顺利运行.也许如果有人知道更好的方法,他们可以告诉我们!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值