Hi,
ich bin grad dabei ein kleines Spiel zu basteln. Dafür wollte ich eine Bitmap als hintergrund nehmen und eine andere als icon für ein paar Dinge, die angezeigt werden sollen.
Die Kästchen, die nachher von den Bitmaps belegt sein sollen, sind 25px breit und 10 px hoch. Mit irfan view hab ich mir eine png erstellt, diese hab ich per
brickbmp=BitmapFactory.decodeResource(getResources(), R.drawable.brick); und im
public void onDraw(Canvas canvas){
canvas.drawBitmap(brickbmp, brick.x,brick.y,paint);
}
angezeigt.
Nur passen die jetzt vorn und hinten nicht, sind viel zu groß. Dabei sind diese png-dateien 100% 10*25px groß. mit einer Funktion habe ich nun versucht die größe anzupassen
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth)
{
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
return resizedBitmap;
}
Alles anzeigen
passt wunderbar. doch wieso erst jetzt und nicht schon vorher?
mein 2. problem ist, dass nun absolut die Performance in die Knie geht. Kästchen erstellen geht, doch sobald da bitmaps rein sollen, geht alles krachen.
Ebenso wenn ich !einmalig! am anfang meiner View Klasse mit
ein Hintergrundbild setze, geht die performance ein.
ich führe rein theoretisch 100 mal/sek invalidate() aus, da ich ein sich bewegendes Objekt habe. Doch aus Leistungsgründen komme ich nicht an die Zahl ran.
Da in meinem "onDraw" zimelich viel drin steht, wird das alles kritisch, wenn das so oft aufgerufen wird, da 90% eh nicht verändert wird, sondern egentlich nur ein Objekt. D.h. theoretisch müsste ich nur das sich bewegende Objekt immer neu Zeichnen und das alte Objekt wieder schwärzen.
Kann ich irgendwas neu zeichnen, ohne onDraw neu aufzurufen?
Grüße