Android的绕中心位不调整(Android rotate bitmap around cente

2019-06-25 17:51发布

我挣扎绘制围绕其中心旋转的位图,也没有调整的位图旋转。 我通过游戏线拉拽我所有的精灵到屏幕上,所以我在寻找结合了原有的位图,而不是在画布上的解决方案。

提前致谢。

这是到目前为止我的代码,它绕其中心位图,但调整它的大小。

i = i + 2;
            transform.postRotate(i, Assets.scoresScreen_LevelStar.getWidth()/2, Assets.scoresScreen_LevelStar.getHeight()/2);
            Bitmap resizedBitmap = Bitmap.createBitmap(Assets.scoresScreen_LevelStar, 0, 0, Assets.scoresScreen_LevelStar.getWidth(), Assets.scoresScreen_LevelStar.getHeight(), transform, true);

            game.getGraphics().getCanvasGameScreen().drawBitmap(resizedBitmap, null, this.levelStar.getHolderPolygons().get(0), null);

更新:

我发现这并不像听起来那么容易。 我的旋转编码是没有问题的。 位图旋转,但在DST RECT也将不得不增加/减少取决于旋转的角度,否则bimap的会出现小的,因为它被拉入一个固定的DST矩形。 所以,我猜我会开发一些方法将返回一个DST矩形。 因此,需要方法将位图旋转,而不出现了调整:

public static Bitmap rotateBitmap(Bitmap bitmap, int rotation) // I've got this method working

public static Rect rotateRect(Rect currentDst, int rotation) // Don't got this

我明白这将需要一些数学(三角函数),任何人都做好了迎接挑战? :P

Answer 1:

您应该借鉴使用位图Matrix类。 下面是一个非常基本的想法假设你想在“船”类的内旋转图像。 您更新的更新方法内的当前位置矩阵。 在的onDraw()你画使用最新更新的位置矩阵位图。 这将绘制旋转位图而不调整其大小。

public class Ship extends View {

    private float x, y;
    private int rotation;
    private Matrix position;    
    private Bitmap bitmap;

    ...

    @Override
    public void onDraw(Canvas canvas) {
        // Draw the Bitmap using the current position
        canvas.drawBitmap(bitmap, position, null);
    }

    public void update() {
        // Generate a new matrix based off of the current rotation and x and y coordinates.
        Matrix m = new Matrix();
        m.postRotate(rotation, bitmap.getWidth()/2, bitmap.getHeight()/2);
        m.postTranslate(x, y);

        // Set the current position to the updated rotation
        position.set(m);

        rotation += 2;
    }

    ....

}

希望帮助!

也请记住,生成新的Bitmap ,你的游戏循环内的对象将需要大量资源。



Answer 2:

这为我工作!

我创建了一个返回一个矩阵的方法。 该基质可以在以下拉伸方法可以使用:

public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)

干得好! (参数形状可以轻松地更换,如果你想的是,仅仅发表评论):

public static Matrix rotateMatrix(Bitmap bitmap, Shape shape, int rotation) {

        float scaleWidth = ((float) shape.getWidth()) / bitmap.getWidth();
        float scaleHeight = ((float) shape.getHeight()) / bitmap.getHeight();

        Matrix rotateMatrix = new Matrix();
        rotateMatrix.postScale(scaleWidth, scaleHeight);
        rotateMatrix.postRotate(rotation, shape.getWidth()/2, shape.getHeight()/2);
        rotateMatrix.postTranslate(shape.getX(), shape.getY());


        return rotateMatrix;

    }

注意:如果你想要一个动画旋转,旋转参数必须与每一帧例如,新的值进行更新。 1,则2然后3 ...



文章来源: Android rotate bitmap around center without resizing