Wie kann man in bestimmter Reihenfolge auf einen Canvas zeichnen?

  • Hi,


    das eine Problem mit dem Drawingcache gelöst, steh ich auch schon vor dem nächsten :-/ Ich zeichne in meiner App auf einen Canvas. Man kann normal Zeichnen mit verschiedenen Brushes, man kann aber auch Kreis- und Rechtecke via Multitouch auf den Canvas legen. Das funzt auch prima. Jetzt hab ich allerdings ein Problem mit der Reihenfolge wie der Canvas gezeichnet wird. Wenn man ein neues Kreis- oder Rechteckobjekt gezeichnet hat und dann normal mit den Brushes weiterzeichnen will sollen diese natürlich über den alten Objekten im Canvas gezeichnet werden und nicht dahinter...


    Ich dachte ich bin schlau und führe für jedes Objekt (FreeHand, Circle o. Square) eine layerId und speichere dieser nacheinander in einer Liste, um die Reihenfolge der gezeichneten Objekte zu speichern. Diese wollte ich dann beim zeichnen des Canvas prüfen, so dass er weiss welches Objekt wohin gehört... nur leider krieg ichs nicht hin :( Habt ihr ne Idee wie ich das entweder mit den layerId's hinbekomme oder vielleicht auch ganz anders... eleganter?


    die Objektklassen:


    onDraw():

  • Problem gelöst! Habe es jetzt über eine LinkedList vom Typ Object gelöst und packe dort alle gezeichneten Objekte rein. Jedes Objekt hat eine eigene Id. Beim zeichnen eines Objekts bekommt jedes Objekt eine Id, die der objectIdList angefügt wird (hinten). Beim zeichnen des Canvas wird einfach die Liste durchlaufen und jedes Objekt ausgegeben und mit der Reihenfolge der objectIdList verglichen. Die wird eigentlich nur benötigt weil man bei mir im Vordergrund und im Hintergrund zeichnen kann. Wenn man im Vordergrund zeichnet wird das Objekt am Ende der objectList angefügt und für den Hintergrund am Anfang der Liste. Um jetzt aber noch die Reihenfolge zu merken in der die Objekte eigentlich gezeichnet wurden hab ich die objectIdList eingeführt, janz einfach :)


    Java
    private LinkedList<Object> objectList = new LinkedList<Object>();
    	private LinkedList<Integer> objectIdList = new LinkedList<Integer>();


    Kann geschlossen werden!

Jetzt mitmachen!

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