我的程序在以任何旋转/方向开始时运行得非常好,但是当我在运行时改变横向< - >肖像之间的方向时,由于我的画布,我得到一个空指针异常。
@Override
public void run(){
while(running){
if(surfaceHolder.getSurface().isValid()){
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK); //NULLPOINTEREXCEPTION here
paint(canvas); //another function of mine
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
我的清单中还有android:configChanges =“orientation”以及
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}
当我注释掉canvas.drawColor(Color.BLACK)时,将调用paint(canvas),然后在下一次在该函数中使用canvas时发生空指针异常。
帮助?
答案 0 :(得分:3)
Javadoc for SurfaceHolder表示如果lockCanvas()
尚未准备好,null
将返回Canvas
,因此您需要做好准备。它表示使用Callback.surfaceCreated()
回调来了解何时使用Canvas
是安全的。
答案 1 :(得分:1)
我建议看看这个帖子: Activity restart on rotation Android
具体为: 创建一个Application类并在那里移动画布初始化。
public class MyApplicationClass extends Application {
@override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}