我有一個類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);
}
}
}
pawnBoard
,bigPawn
和smallPawn
,在這個類公衆,他們是這樣的:
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);
}
我一直在尋找的解決方案,但這些都不是我發現是有益的。
onDraw是否被調用?或者,它是否繪製了錯誤的位圖? – Simon
當我創建一個擴展SurfaceView的GameBoard實例(onDraw是SurfaceView的標準方法)時,onDraw被'調用'。第一次,一切都是正確的。但在setBitmaps方法內調用invalidate()之後,沒有什麼改變。我沒有任何錯誤或警告。應用程序正在工作,但位圖不會更改 – Ziva
好吧,我會更精確。在你失效()之後,是否調用了onDraw()? – Simon