Teile einer Bitmap als ImageView anzeigen

  • Guten Abend allerseits.


    Ich habe mir für mein TowerDefense eine kleine Scrollfunktion gebastelt, die wie folgt funktioniert:
    Ich lade eine Bitmap und "stanze" mir mit einem Rect den Teil aus der Bitmap, den ich auf dem Bildschirm anzeigen will, und zeichne es dann mithilfe von canvas.drawBitmap(...) auf den Bildschirm.


    Hier zur verdeutlichung:

    Code
    //The rect that gets the part of the bitmap
    		srcRect = new Rect(Math.round(xPos),
    						   Math.round(yPos),
    						   Math.round(xPos+canvas.getWidth()-zoomlevel),
    						   Math.round(yPos+canvas.getHeight()-zoomlevel));
    		//The rect that is going to be displayed
    		dstRect = new Rect(0, 0, canvas.getWidth(), canvas.getHeight());
    		//Draw the displayed part of the bitmap on canvas
    		canvas.drawBitmap(bitmap, srcRect, dstRect, new Paint());


    Mein Problem ist nun, dass man anscheinend pro Activity entweder nur mit .xml dateien arbeiten kann(also layouts), ODER wie hier zu sehen mit canvas. Da mir aber die bereits vorgefertigten Elemente wie beispielsweise Buttons oder LinearLayouts das Designen der App ungemein erleichtern, wollte ich wissen, ob man den Teil der Bitmap, den ich anzeigen will, auch irgentwie als ImageView anzeigen lassen kann, anstatt mit canvas zu zeichnen? Denn dann könnte ich auch die Standardelemente wie Buttons verwenden.


    Hoffe ihr wisst da genaueres :)



    MfG XoR

  • Hmm funktioniert noch nicht einwandfrei :(
    Android wirft immer eine NullPointerException raus(Zeile 69).


    Hier der Code:



    Weiß nicht genau, was hier den Fehler verursacht. Habe es nach dem Beispiel aus deinem Link gemacht. Hoffe ihr seht, was ich nicht sehe :)



    MfG XoR

  • Schau dir mal die Info zu surfaceHolder.lockCanvas() an, da steht dass wenn du NULL zurückbekommst deine Surface entweder nicht editierbar ist, oder noch nicht erstell (was bei dir der Fall ist in Zeile 69) und man soll "surfaceCreate" callback verwenden, welches du ja schon im Code hast.
    Lösch mal zeile 68 und schieb zeile 69+70 ins "surfaceCreated"


    Gruss
    antifish

  • Erstmal danke für deine Antworten.
    Das Verschieben der beiden Zeilen in die Callback behebt das Problem nicht ganz.Die Map wird noch nicht angezeigt, obwohl ich die Bitmap dann einem ImageView zuweise. Zudem hat nun das Scrollen einen Absturz zur Folge. Der Fehler wird hier in Zeile 80(GameView) angezeigt und wirft eine NullPointerException aus. Ich hab dann bischen rumprobiert, und festgestellt, dass wenn ich die Breite oder Höhe vom Canvas ausgeben will, nichts ausgegeben wird(evtl. hier der Fehler?).


    Hier noch meine Dateien:
    GameView:



    InstanceActivity:



    Vielen Dank schon mal im Voraus!



    MfG XoR

Jetzt mitmachen!

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