2011-06-17 44 views
2

サーフェイスビューで描画しようとしていますが、黒い画面が表示されます。私のXMLレイアウト:私のコードのAndroid SurfaceViewで黒い画面が表示される

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
    <com.example.surfaceview.MySurface android:id="@+id/padview" 
     android:layout_width="match_parent" android:layout_height="match_parent" /> 
</FrameLayout> 

重要な部分:MySurface.java

パブリッククラスMySurfaceはSurfaceViewがSurfaceHolder.Callback {

public DrawingThread thread; 

public MySurface(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    SurfaceHolder surfaceholder = getHolder(); 
    surfaceholder.addCallback(this); 

    thread = new DrawingThread(surfaceholder, context, new Handler() { 
     @Override 
     public void handleMessage(Message m) { 
      // Do some handle thing 
     } 
    }); 

    setFocusable(true); 
} 

@Override 
public void surfaceChanged(SurfaceHolder tholder, int format, int width, int height) { 
    thread.setSurfaceSize(width, height); 
    thread.holder = tholder; 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    thread.running = true; 
    thread.start(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    boolean retry = true; 
    thread.running = false; 
    while(retry) { 
     try { 
      thread.join(); 
      retry = false; 
     } catch (InterruptedException e) { 
     } 
    } 
} 

public Thread getThread() { 
    return thread; 
} 

public class DrawingThread extends Thread { 
    private SurfaceHolder holder; 
    private Context context; 
    private Handler handle; 
    private Paint background; 
    private Rect blank; 

    public boolean running; 
    public boolean created; 

    public int canvasheight; 
    public int canvaswidth; 

    public PadThread(SurfaceHolder tholder, Context tcontext, Handler thandler) { 
     holder = tholder; 
     context = tcontext; 
     handle = thandler; 

     // Temporary canvas dimentions 
     canvaswidth = 1; 
     canvasheight = 1; 

     running = false; 
     created = false; 

     background = new Paint(); 
     background.setColor(R.color.white); 
     blank = new Rect(0, 0, canvaswidth, canvasheight); 
    } 

    @Override 
    public void run() { 
     Log.d("SurfaceView Test", "Drawing thread run"); 
     while(running) { 
      Canvas canvas = null; 
      try { 
       canvas = holder.lockCanvas(); 
       synchronized(holder) { 
        // update object states 
        // get user input gestures 
        drawing(canvas); 
       } 
      } finally { 
       if(canvas != null) { 
        holder.unlockCanvasAndPost(canvas); 
       } 
      } 
     } 
    } 

    private void drawing(Canvas canvas) { 
     // Clear screen 
     canvas.drawRect(blank, background); 

     // Draw Things 
    } 

    public void setSurfaceSize(int width, int height) { 
     synchronized(holder) { 
      canvaswidth = width; 
      canvasheight = height; 

      // New background rect 
      blank.set(0, 0, canvaswidth, canvasheight); 
     } 
    } 
} 

}

コードが基づいている実装延びGoogleのLunar Landar SurfaceViewの例:http://developer.android.com/resources/samples/LunarLander/index.html

私はすべてのコードがロギングを通じて到達していることを知っています。

+1

それが修正されています、問題は、私はので、代わりに 'background.setColor(R.colorのではなくR.より提供されるコンテキストから色をロードしなければならなかったということでした。 white) '、' background.setColor(context.getResources()。getColor(R.color.white) ')を使用しなければなりませんでした。 – zim333311

答えて

-1

変化描画機能

background.setColor(Color.RED)。 canvas.drawRect(新しいRect(10,10,100,100)、背景);

(色やRECTのためのテスト値があります)

関連する問題