2013-02-03 50 views
1

我有一個類GameBoard其延伸SurfaceView。裏面我有一個OnDraw方法:如何使用invalidate()metod重繪SurfaceView?

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     int size = getWidth()/8; 
     canvasSize = size; 
     pawnBitmap[0] = bigPawn; 
     pawnBitmap[1] = smallPawn; 
     float left_distance; 
     float top_distance; 
     for(int j = 0; j < 10; j++){ 
      for (int i =0; i < 4; i++){ 
       left_distance = i*size+(float)50; 
       top_distance = j*size+(float)10; 
       canvas.drawBitmap(pawnBitmap[0], left_distance, top_distance, paint); 
       canvas.drawBitmap(pawnBitmap[1], 6*size+i*30+(float)10, top_distance+30, paint); 
      } 
     } 

    } 

pawnBoardbigPawnsmallPawn,在這個類公衆,他們是這樣的:

public BitmapFactory myBitmapFactory = new BitmapFactory(); 

public Bitmap[] pawnBitmap = new Bitmap[2]; 
public Bitmap bigPawn = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.game_button_2), 90, 90, false); 
public Bitmap smallPawn = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.game_button_2), 30, 30, false); 

我也有第二種方法中,我改變了形象bigPawn和smallPawn:

public void setBitmaps(Bitmap one, Bitmap two){ 
     this.paint = new Paint(); 
     this.bigPawn = one; 
     this.smallPawn = two; 
     this.tmp=4; 
     invalidate(); 

    } 

但是,在另一個類(另一個類中)內調用此方法後,ima ges沒有變化。如果setBitmaps()方法真的改變圖像,我使用tmp變量進行檢查,這是正確的。但無效功能不起作用。爲什麼? 這裏是我如何調用該方法setBitmaps

public void savePermutation(View view){ 

     Bitmap tmpBitmap1 = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.blue), 230, 230, false); 
     Bitmap tmpBitmap2 = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.blue), 100, 100, false); 
     myGameBoard.setBitmaps(tmpBitmap1, tmpBitmap2); 


    } 

我一直在尋找的解決方案,但這些都不是我發現是有益的。

+0

onDraw是否被調用?或者,它是否繪製了錯誤的位圖? – Simon

+0

當我創建一個擴展SurfaceView的GameBoard實例(onDraw是SurfaceView的標準方法)時,onDraw被'調用'。第一次,一切都是正確的。但在setBitmaps方法內調用invalidate()之後,沒有什麼改變。我沒有任何錯誤或警告。應用程序正在工作,但位圖不會更改 – Ziva

+0

好吧,我會更精確。在你失效()之後,是否調用了onDraw()? – Simon

回答

2

重寫surfaceCreated()。然後添加下面這行:

setWillNotDraw(false); 
+1

你的意思是我應該在surfaceCreated()方法中添加這一行?不幸的是,它並沒有幫助 – Ziva

+0

是的我認爲默認情況下不會重繪默認 – Simon

+0

感謝您的幫助,但它沒有幫助,圖像沒有變化 – Ziva