android - 位图矩阵postRotate改变X和Y轴方向

标签 android canvas matrix

我正在尝试使用我在某处找到的现成解决方案来旋转我的位图。代码如下:

      public void onDraw(Canvas canvas) {
                float x = ship.Position.left;
                float y = ship.Position.top;
                canvas.drawBitmap(ship.ship, x,y,null);
                invalidate();
      }

但是,当我这样做时,X 轴和 Y 轴会改变它们的方向 - 如果我增加 Y 值,图像将朝向屏幕顶部,而不是底部。如果我旋转 90 度,X 也会发生同样的情况。

我需要旋转它但不改变 Y 轴和 X 轴方向。

即使旋转,如果我增加 Y,我仍然希望 Bitmap 向底部移动;如果我增加 X,我仍然希望 Bitmap 向右移动。

     public void update()
     {
       if(!moving)
         {
           fall();
         }
       else //moving
         {
           move();
          faceDirection();
         }
       Position.top += Speed;
      }

private void move() {
   if(Speed < MAXSPEED)
        Speed -= 0.5f;  
 }
private void fall() {
    if(Speed > MAXSPEED*-1)
    Speed += 0.2f;  
 }
private void faceDirection() {

    double OldDiretion = Direction;
    Direction = DirectionHelper.FaceObject(Position, ClickedDiretion);
    if (Direction != OldDiretion)
    {
        Matrix matrix = new Matrix();
        matrix.postRotate((float)Direction);
        ship = Bitmap.createBitmap(ship, 0, 0, ship.getWidth(),ship.getHeight(), matrix, false);
    }

我试过上面的代码,但它仍然在改变 Y 方向,它会到达 BitMap 的底部,而不是屏幕底部。

这是项目:https://docs.google.com/file/d/0B8V9oTk0eiOKOUZJMWtsSmUtV3M/edit?usp=sharing

最佳答案

你应该先旋转,而不是平移:

matrix.postTranslate(x, y);
matrix.postRotate(degree);

替代方法是尝试使用 preRotate() 而不是 postRotate()

我还强烈建议在绘图时平移/旋转原件。所以您的 createBitmap() 调用不应修改方向。至少当您在用户交互时动态更改它时不会。否则,您会创建大量位图来表示一遍又一遍的旋转,这会影响性能。

关于android - 位图矩阵postRotate改变X和Y轴方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572961/

相关文章:

java - 显示可扩展列表子项而不触摸标题

javascript - 在 SetTimeout 函数之后调用一个函数

c - 尝试为任意大小的矩阵编写矩阵乘法器

android - 由于 GRPC 和 R8,Firestore (0.6.6-dev) 出现内部错误

android - 如何让路线绘制更高效?

canvas - 在Flutter中drawImage或paintImage均无法正常工作

javascript - 一段时间后 Canvas 开始滞后

java - 尝试用随机值填充 boolean 矩阵

matlab - 如何创建一个对称矩阵,其中每行/列都是已知向量的子集

android - 如何为预定通知设置默认设备警报音?