Android 位图变为空

Android 位图变为空,android,canvas,bitmap,Android,Canvas,Bitmap,首先,我创建一个新位图 Bitmap image = BitmapFactory.decodeResource(Game.panel.context.getResources(),R.drawable.dinofront) 然后我拉伸图像,然后我检查位图是否为空,是否为空 image = Bitmap.createScaledBitmap(image, Game.tileWidth, Game.tileHeight, false); 稍后在draw()方法中,在对位图执行任何操作之前,我再次

首先,我创建一个新位图

Bitmap image = BitmapFactory.decodeResource(Game.panel.context.getResources(),R.drawable.dinofront)
然后我拉伸图像,然后我检查位图是否为空,是否为空

image = Bitmap.createScaledBitmap(image, Game.tileWidth, Game.tileHeight, false);
稍后在draw()方法中,在对位图执行任何操作之前,我再次检查,它现在为null。有人知道为什么会这样吗?有什么特别的事情我必须做,我错过了吗


全班:

我可以想到两个可能的原因:

  • 可能只是图像变量可能会被代码的其他部分更改
  • 线程同步——请记住,代码可能不会按照Java源代码中指定的顺序执行,但可以按照JVM认为合适的顺序重新排序,这是正确的。当您在构造函数中执行非常耗时的位图操作时,这种情况尤其可能发生,我假设您的对象创建代码与绘图代码位于不同的线程上。要检查这种可能性,您可以声明一个只有在构造函数完成时才设置为true的易失性布尔变量,并在
    draw()
    方法中检查其值

  • 哇,我觉得自己很愚蠢。因为当我调用image=Bitmap.create时,有类的图像和构造函数带来的图像。。。它只是设置构造函数的映像而不是this.image,所以如果我将其更改为this.image=。。。这一切都很好

    如果您不发布整个代码,我们将无法帮助您,因为您发布的代码看起来很正常。如果您在代码的其他地方(例如在另一个线程中)修改图像变量,我建议您在项目中查找。添加完整的文件