Android无法在onCreate()中更新SurfaceView?
我想做的是创建一个带有SurfaceView的绘图应用程序。我的应用程序基本上完成了,但缺少一件事:我无法让SurfaceView在创建其活动时自行绘制 我的Android无法在onCreate()中更新SurfaceView?,android,canvas,surfaceview,Android,Canvas,Surfaceview,我想做的是创建一个带有SurfaceView的绘图应用程序。我的应用程序基本上完成了,但缺少一件事:我无法让SurfaceView在创建其活动时自行绘制 我的SurfaceView派生类如下所示(只是重要部分): 以及活动的onCreate: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATUR
SurfaceView
派生类如下所示(只是重要部分):
以及活动的onCreate:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
surface = new DrawingSurface(this);
setContentView(surface);
//surface.paint(); <--- here is the problem
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
表面=新图纸表面(本);
setContentView(表面);
//surface.paint();尝试不同的模型。在SurfaceView中进行所有绘制
public class DrawingSurface extends SurfaceView implements SurfaceHolder.Callback {
public DrawingSurface(Context context) {
super(context);
getHolder().addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
updatePanel();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
updatePanel();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
updatePanel();
}
public void updatePanel() {
Canvas canvas = null;
try {
canvas = getHolder().lockCanvas(null);
synchronized (getHolder()) {
doDraw(canvas);
}
}
finally {
if (canvas != null) {
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}
您还可以在touch listener中调用updatePanel方法
所有的绘制都在doDraw方法中进行,该方法从未在SurfaceView之外调用。此外,在尝试绘制任何内容之前,请确保在画布对象上的doDraw中执行空检查。嘿!谢谢,但我实际上是在SurfaceView中绘制的。当我查看li时,Eclipse甚至不提供这些要重写的函数这些方法是什么样的类?抱歉,我遗漏了一条重要信息。这些方法属于SurfaceHolder.Callback。实现它并在构造函数中将surfaceView设置为自己的回调。当天的英雄:D非常感谢!!
public class DrawingSurface extends SurfaceView implements SurfaceHolder.Callback {
public DrawingSurface(Context context) {
super(context);
getHolder().addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
updatePanel();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
updatePanel();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
updatePanel();
}
public void updatePanel() {
Canvas canvas = null;
try {
canvas = getHolder().lockCanvas(null);
synchronized (getHolder()) {
doDraw(canvas);
}
}
finally {
if (canvas != null) {
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}