gpt4 book ai didi

android - 如何在 Canvas 上用 x 点旋转位图?

转载 作者:行者123 更新时间:2023-11-29 20:42:36 25 4
gpt4 key购买 nike

我正在尝试开发一款简单的游戏。我的问题是我试图通过触摸监听器中的“x”事件来旋转屏幕底部的箭头图像。

下面是我的箭头类:

public class Arrow extends GameObject{

boolean show = true;
Bitmap bmp;
Game game;
Matrix matrix;
int i = 0;
public Arrow(Handler handler, int x, int y, int xSpeed, int ySpeed , Game game) {
super(handler, x, y, xSpeed, ySpeed);
this.game = game;
bmp = BitmapFactory.decodeResource(game.getResources(), R.drawable.arrow);

matrix = new Matrix();

}

@Override
public void tick() {

}

@Override
public void render(Canvas c) {

matrix.postRotate(x);
c.drawBitmap(bmp,matrix, null);
}

}

这是事件监听器 @覆盖 public boolean onTouch(View v, MotionEvent 事件) {

    x = (int) event.getX();
y = (int) event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
arrow.setX(x);
break;
case MotionEvent.ACTION_MOVE :
touch.move();
break;
case MotionEvent.ACTION_UP:
break;
}
}
}
}
return true;
}

here is a picture that shows what I mean

如何编写旋转位图的代码?

最佳答案

这是一个例子。

Matrix matrix = new Matrix();
//Calculate the rotation of the bitmap.
rotation += 10;
matrix.postRotate(rotation); // or matrix.postRotate(rotation,cx,cy);
canvas.drawBitmap(bitmap, matrix, null);

作为一种优化,在此方法之外创建 Matrix 一次,并用对 matrix.reset() 的调用替换创建。
这样 Canvas 将像以前一样保持定向,您可以使用 Matrix 做更多的事情例如平移、缩放等,矩阵的内容封装了您操作的真正含义。

计算角度:

首先要计算角度,您需要知道 Seekbar 的总进度长度(进度的最小值 - 进度的最大值)以及搜索后值的变化。
考虑

Min of seek bar = 0
Max value of seekbar = 30

现在计算单位角度,即

1 unit = 360/30 = 12.

假设用户将搜索栏位置从 10 更改为 20。现在计算差异

int diff = 10-20 = -10.

rotation angle = (-10 * 12) = -120;

示例 2:

如果用户将搜索栏位置从 15 更改为 10。现在计算差异

int diff = 15-10 = 5.

rotation angle = (5 * 12) = 60;

关于android - 如何在 Canvas 上用 x 点旋转位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30796112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com