2011-07-14 80 views
1

我试图做一些非常简单绘制成SurfaceView但我无法得到它的工作。没有例外,但我也没有看到任何结果。在Android中绘制到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

回答

4

我删除了代理类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); 
    } 
}