Canvas-Bitmap passt nicht, Bild zwing Performance in die Knie

  • 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


    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

    Code
    this.setBackgroundDrawable(
        			    	new BitmapDrawable(getContext().getResources(), brickbmp));

    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

  • Hey Fabi.
    Wenn du mit dem Canvas arbeitest, kannst du nichts zeichnen ohne onDraw.


    Schau dir doch mal meine Tutorialserie an, da kannst du sicher den ein oder anderen Tipp für dich finden:
    http://panjutorials.de/tutoria…ngstutorial-lazy-pudding/


    Dort erkläre ich, wie ich eine kleine android app entwickelt habe. Ich arbeite auch mit onDraw und Surfaceviews.


    versuche so gut es geht, die berechnung und das anlegen von objekten nicht in der onDraw() methode durchzuführen. Da sie wie du bereits gesagt hast sehr oft aufgerufen wird und sie jedes mal die ganzen berechnungen ablaufen muss.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!