我已经在论坛和Google上进行了一些关于初始化和使用静态字段的搜索。但我不能单独解决它,所以这里是简化的代码:
...
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();
...
...
}
...
}
我错过了什么吗?
答案 0 :(得分: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代码气味。我不知道你要用它做什么,但我认为没有任何好处。如果您在多个线程之间共享此画布,您可能会发现遇到并发读/写违规的大量问题。
答案 1 :(得分:-1)
变量myCanvas在该点可能没有值。所以你必须检查一个空值。
myMaxX = (myCanvas != null)?myCanvas.getWidth():0;
// <=== check for null