我在使位图正确旋转时遇到问题。我有一个带有多个位图的SurfaceView。这些位图存在于arraylist中并使用for循环我在onDraw方法中为每个调用canvas.drawBitmap。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
for (int i = 0; i < jumper.size(); i++) {
canvas.drawBitmap(jumper.get(i).getGraphic(), jumper.get(i)
.getCoordinates().getX(), jumper.get(i).getCoordinates()
.getY(), null);
}
}
我试图让用户选择一个特定的位图(多个中的一个),然后在用户将手指拖过屏幕时旋转该位图。所以这是旋转代码。现在我只是在屏幕中心附近的某个随机位置使用默认的android图标(72x72px)。
private void rotateJumper(int direction) {
Matrix matrix = new Matrix();
Bitmap source = jumper.get(selectedJumperPos).getGraphic();
matrix.postRotate(direction, source.getWidth() / 2,
source.getHeight() / 2);
int x = 0;
int y = 0;
int width = 72;
int height = 72;
Bitmap tempBitmap = Bitmap.createBitmap(source, x, y, width, height,
matrix, true);
jumper.get(selectedJumperPos).setGraphic(tempBitmap);
}
整数方向为+1或-1,具体取决于手指拖动的方向。因此,对于每个MotionEvent.ACTION_MOVE事件,图像应旋转1度。
以下是问题:
您可以给我的任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
请原谅我做出相当不错的回答,但是你的forloop引起了我的注意。有可能以“更具可读性”的格式编写它;
for (YourJumperItem item : jumper) {
canvas.drawBitmap(
item.getGraphic(), item.getCoordinates().getX(),
item.getCoordinates().getY(), null );
}
其中YourJumperItem
是您的跳线-array包含的类类型。不幸的是,关于旋转位图不能说太多,我只是在为-loops提供这种方便的写作方式。
答案 1 :(得分:0)
使用矩阵将现有位图绘制到画布而不是创建新位图:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
for (int i = 0; i < jumper.size(); i++) {
canvas.drawBitmap(jumper.get(i).getGraphic(), jumper.get(i).getMatrix(), null);
}
}
private void rotateJumper(int direction) {
Matrix matrix = jumper.get(selectedJumperPos).getMatrix();
if(matrix == null) {
matrix = new Matrix();
matrix.setTranslate(jumper.get(...).getCoord...().getX(), jumper.get(..).getCoord...().getY());
jumper.get(selectedJumperPos).setMatrix(matrix);
}
Bitmap source = jumper.get(selectedJumperPos).getGraphic();
matrix.postRotate(direction, source.getWidth() / 2,
source.getHeight() / 2);
}