本帖最后由 iwantit33 于 2011-07-14 19:46:23 编辑

解决方案 »

  1.   

    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    public class TestSurfaceViewActivity extends Activity {
             SurfaceView sfv;
    SurfaceHolder sfh;
            Canvas ca1;
    @Override
    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01);
    sfh = sfv.getHolder();
    carr1 car1 =new carr1(this);
    sfh.addCallback(car1);
    ca1=sfh.lockCanvas(null);//此句报错,返回null……
                      //也使用ca1=sfh.lockCanvas(new Rect(0,0,200,200));也返回null
    Paint mPaint = new Paint();
    mPaint.setColor(Color.GREEN);
                    canvas.drawLine(0,0,200,200,mPaint);
    srf.unlockCanvasAndPost(ca1);
    }

    }
      

  2.   

    因为出错,所以做了这样一个简单的activity来测试,想不到也不行,实在想不到原因,请指教~~~~~~~~~
      

  3.   

    // 实例化SurfaceHolder
    mSurfaceHolder = this.getHolder();
    // 添加回调 函数
    // 注意这里这句 mSurfaceHolder.addCallback(this)这句执行完了之后
    // 马上就会回调 surfaceCreated方法了 然后开启线程 执行绘图方法这里这个执行顺序要搞清楚
    mSurfaceHolder.addCallback(this);
    protected void Draw() { // 锁定画布,得到canvas 用SurfaceHolder对象的lockCanvas方法
    sCanvas = mSurfaceHolder.lockCanvas();
    if (mSurfaceHolder == null || sCanvas == null) {
    return;
    }
    UpdateGame();
    RenderGame();
    // 绘制后解锁,绘制后必须解锁才能显示
    mSurfaceHolder.unlockCanvasAndPost(sCanvas);
    }
      

  4.   

    ls的做法是自定义的surfaceview的做法
    (mSurfaceHolder = this.getHolder();//this指明此类是surfaceview的子类
    surfaceHolder.addCallback(this)//这句的this指明此类继承surfaceHolder.addCallback接口)但我想问的是,如果我想使用 surfaceview 标准件,我在xml中定义<surfaceview></surfaceview>
    之后再activity 的oncreated中调用setcontentview(R.Layout.main)后理应由系统自动调用surfaceview标准件的构成方法才对,所以我在surfaceview.gethodler().getsurface()后可以在调试中看见msurface是存在的,因此才困惑,因为lockcanvas返回null,但关联的surface已经生成了……
      

  5.   

    要实现Callback.surfaceCreated来检测Surface什么时候可用,Callback.surfaceCreated都还没调用就使用lockCanvas()当然返回null了,把你绘图的那断代码放在surfaceCreated内就不会返回null了。surfaceCreated被调用之后lockCanvas才返回非空的 。