2011-07-14 78 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); 
    } 
}