在Android中绘制到SurfaceView

我正在尝试将一些非常简单的绘图绘制到SurfaceView但我无法使其工作。 没有例外,但我也没有看到任何结果。

更准确地说,我正在尝试创建一个SurfaceView并用单一颜色填充它。

这是我的代码:

 public class SvetlinSurfaceViewTestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SurfaceRenderer renderer = new SurfaceRenderer(this); setContentView(renderer); } } class SurfaceRenderer extends ViewGroup implements SurfaceHolder.Callback { private final String TAG = "Svetlin Surface Renderer"; SurfaceView mSurfaceView; SurfaceHolder mHolder; public SurfaceRenderer(Context context) { super(context); mSurfaceView = new SurfaceView(context); addView(mSurfaceView); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = mSurfaceView.getHolder(); mHolder.addCallback(this); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {} @Override public void surfaceCreated(SurfaceHolder holder) { tryDrawing(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { tryDrawing(holder); } @Override public void surfaceDestroyed(SurfaceHolder holder) {} private void tryDrawing(SurfaceHolder holder) { Log.i(TAG, "Trying to draw..."); Canvas canvas = holder.lockCanvas(); if (canvas == null) { Log.e(TAG, "Cannot draw onto the canvas as it's null"); } else { drawMyStuff(canvas); holder.unlockCanvasAndPost(canvas); } } private void drawMyStuff(final Canvas canvas) { Log.i(TAG, "Drawing..."); canvas.drawRGB(255, 128, 128); } } 

正如预期的那样,我正在绘制……输出两次。

任何人都可以建议为什么我可能无法绘制SurfaceView

我删除了代理类SurfaceRenderer并将其全部移动到我的活动中。 它现在正在运作。 这里是固定代码:

 public class SvetlinSurfaceViewTestActivity extends Activity implements SurfaceHolder.Callback { private static final String TAG = "Svetlin SurfaceView"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SurfaceView view = new SurfaceView(this); setContentView(view); view.getHolder().addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { tryDrawing(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int frmt, int w, int h) { tryDrawing(holder); } @Override public void surfaceDestroyed(SurfaceHolder holder) {} private void tryDrawing(SurfaceHolder holder) { Log.i(TAG, "Trying to draw..."); Canvas canvas = holder.lockCanvas(); if (canvas == null) { Log.e(TAG, "Cannot draw onto the canvas as it's null"); } else { drawMyStuff(canvas); holder.unlockCanvasAndPost(canvas); } } private void drawMyStuff(final Canvas canvas) { Random random = new Random(); Log.i(TAG, "Drawing..."); canvas.drawRGB(255, 128, 128); } }