将图像旋转移植到android

时间:2014-04-30 12:23:20

标签: java android canvas port affinetransform

我想在Android上写一个小游戏,因为我有很好的Java实验,我先用Java编写它。现在我想移植游戏,但不幸的是Android库不支持" AffineTransform"或" Graphics2d"。 我知道可以使用canvas完成旋转,但我还没有设法显示图像。 我遇到的问题是从不调用onDraw方法。下面是我在Java中使用并希望移植到Android的示例代码。

public void drawEdge(Edge edge, Graphics g){
.... computation Stuff
Graphics2D g2d = (Graphics2D) g;
AffineTransform att = new AffineTransform();
att.translate(posX,posY);
att.rotate(rotAngle);
g2d.drawImage(lineImage, att, null);
}

所以在Android中我尝试了这个:

public void drawEdge(Edge edge, Graphics g){
.... computation Stuff
Paint mPaint = new Paint();
canvas.drawLine(200, 200, 400, 400, mPaint); // Just a simple line not the edge yet
}

但这不起作用。我也尝试创建onDraw方法,但似乎从未调用过。此外,我无法将limeImage加载为位图。我用过:

Assets.lineBitmap = BitmapFactory.decodeFile("LineImage.png");

并获取massege:无法解码流:java.io.FileNotFoundException。但是使用:

Assets.lineImage = g.newImage("Line_height6.png", ImageFormat.RGB565);

工作正常。

我知道有很多关于画布用法的教程,但我仍然无法弄清楚代码有什么问题,所以如果有任何人对我有任何线索,我会非常感激。< / p>

最佳Sergej

1 个答案:

答案 0 :(得分:0)

好吧我设法在上面的代码中绘制了一行,问题是我的itmap文件不是improter:解决了

    FileIO fileIO = game.getFileIO();
    InputStream in = null;
    Bitmap bitmap;
    try {
        in = fileIO.readAsset("Line_height6.png");
        bitmap = BitmapFactory.decodeStream(in);
        } 
    catch(IOException e) {
        throw new RuntimeException("Couldn't load texture '" + "Line_height6.png", e);}

所以我现在所做的就是使用游戏开头创建的画布。然后我可以划清界限。到现在为止还挺好。但是如果我想旋转位图,那么背景也会旋转。我尝试解决方案是使用位图创建一个新画布:

Bitmap bmp = lineBitmap;
Bitmap mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true);
Canvas newcanvas = new Canvas(mutableBitmap);
newcanvas.rotate((float) theta);
newcanvas.drawBitmap(mutableBitmap, matrix, paint2); 

但我现在没有新的图片或错误。背景在那里,以及我在原始画布上绘制的一些其他图像,但我无法显示旋转位图。 有什么建议吗?