0

我已经在论坛和谷歌上进行了一些关于初始化和使用静态字段的搜索。但我不能单独修复它,所以这里是简化的代码:

...
import android.graphics.Canvas;
...

public class MyActivity extends Activity{

...
public static Canvas myCanvas = new Canvas();
public static float myMaxX;
public static float myMaxY;
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    ...
    myMaxX = myCanvas.getWidth(); // <=== Error, the app crashes right there
    myMaxY = myCanvas.getHeight();
    ... 
    ...

    }
...
}

我错过了什么 ?

4

2 回答 2

1

是的!

您需要先创建一个位图:

int w = WIDTH_PX, h = HEIGHT_PX;

BitmapConfig conf = Bitmap.Config.ARGB_8888; // see other conf types
Bitmap bmp = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
Canvas canvas = new Canvas(bmp);

// ready to draw on that bitmap through that canvas

但是创建一个静态的 Canvas 会散发出代码的味道。我不知道你想用它做什么,但我认为它不会有任何好处。如果您在多个线程之间共享此画布,您可能会发现您遇到大量关于并发读/写冲突的问题。

于 2012-06-18T15:19:02.997 回答
-1

此时变量 myCanvas 可能没有值。所以你必须检查一个空值。

 myMaxX = (myCanvas != null)?myCanvas.getWidth():0; 
                // <=== check for null
于 2012-06-18T15:18:04.823 回答