【问题标题】:Code to rotate a bitmap using Matrix causing force close使用矩阵旋转位图的代码导致强制关闭
【发布时间】:2012-04-09 17:00:53
【问题描述】:

我正在开发一个简单的游戏,其中一个球在斜坡上翻滚,必须通过跳跃来避开障碍物。当我尝试使用Matrix 旋转球对象时,问题就出现了。我正在使用以下代码:-

private void rotateMe() {
    if(jump==0){
        Matrix mtx=new Matrix();
        mtx.postRotate(deg);
        Bitmap rotatedBMP=Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), mtx, false);
        deg=deg+1; //deg=0 in beginning
        bm=rotatedBMP;
    }   
}

这个方法写在ball的类中,内部被另一个方法move()调用。位图 bm 没有按我的意愿旋转。它只是从屏幕上掉下来,似乎位图的大小增加了。我必须在几秒钟后强制关闭它。
我见过其他旋转位图问题,但它们也不适用于我。 提前致谢。

【问题讨论】:

  • 能否把绘图代码也发一下?

标签: java android matrix


【解决方案1】:

您一直在旋转具有相同值 (10) 的 Matrix。这就是球不旋转的原因。 请改为执行以下操作:mtx.postRotate(deg);

另外,一般性评论:我猜你正在绘制生成的旋转球bm? 如果您在不同的线程中绘制球,那么您应该首先查看的是确保您的线程具有对bm 的独占访问权限,这样您就不会在球受到新值影响时渲染球bm=rotatedBMP;

【讨论】:

  • 那么即使使用 deg 也存在同样的问题。球从屏幕上掉下来,并显示强制关闭消息。
【解决方案2】:

反正我自己找到了答案。我现在使用的代码如下(对于有同样问题的人)

Matrix mtx=new Matrix();
mtx.postRotate(deg,25,25);
mtx.postTranslate(x, y);
c.drawBitmap(bm, mtx, paint);
deg=deg-10;

代码现在运行良好。 无论如何,谢谢。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多