2017-11-21 6 views
2

Ich bin neu in Android-Entwicklung, so habe ich diese Neuling Frage hier:Ist es besser, in diesem Szenario Canvas statt AddView dynamisch zu verwenden?

Ich habe eine Canvas-Ansicht, angepasst, in einer Aktivität. Ich möchte Bilder programmgesteuert anzeigen (PNG-Zeichen).

klar Ich habe 2 Möglichkeiten dies zu tun, die erste, konventionellere Weise ist:

Option I:

  1. Finden Sie das "Activity Layout" (das Layout für die gesamte Aktivität)
  2. Legen Sie die Parameter für das PNG ImageView fest.
  3. ActivityLayout.addView (pngImageView)

Edit: Also diese Weise wird das PNG gezeigt, aber nicht wirklich "ein Teil von" Canvas, da es nicht wirklich gezogen "in" Canvas ist, Aber obendrein, aber für die Benutzer ist es unmöglich zu sagen.

Option II:

ein Auslosungs Objekt verwenden, legen Sie die Ressource zu meinem gewünschten PNG ziehbar, dann rufen

Drawable.draw(myCanvas) 

Edit: Auf diese Weise wird die ziehbar „ein Teil“ der sein Canvas und tatsächlich "in" es gezeichnet. Aber andererseits würden die Benutzer es nicht von der ersten Möglichkeit erzählen können.

Wäre ich mit Option II besser dran? Insbesondere möchte ich das Png-Zeichen manipulieren, spiegeln, drehen usw., wahrscheinlich unter Verwendung von Matrix.

Vielen Dank im Voraus!

Edit: Ich möchte so wenig Ärger wie möglich, und ich möchte in der Lage sein, die gesamte Leinwand zu bmp-Datei in Zukunft einschließlich alles auf der Leinwand und dem Png-Zeichen zu exportieren.

+0

Hallo, das ist ziemlich merkwürdig, ich dachte immer, Canvas - da es geboren ist, um komplizierte Computergrafiken zu bewältigen - sollte es handlicher sein, wenn es um komplizierte grafische Manipulation geht? Könntest du freundlicher sein, wenn du mir sagst, warum ein View besser ist, wenn ich etwas "Komplexeres" machen will? – Miko

Antwort

0

Die Unterschiede bestehen darin, dass die Leinwandzeichnung durch Hardwarebeschleunigung (GPU) erfolgt und die dynamische Zeichnung durch Software (CPU) erfolgt. Wenn Sie die Hardwarebeschleunigung deaktivieren, werden sie genau die gleichen. Ich bin mir nicht sicher, welche die genauere ist, sie scheinen nur verschiedene Implementierungen zu sein.

Verwandte Themen