Grundlegendes zu Leinwand- und Oberflächenkonzepten
Ich habe Mühe zu verstehen, den Prozess der Zeichnung zu SurfaceView
also die ganze Surface
/Canvas
/Bitmap
system, das in Android.
Ich gelesen habe, alle Artikel und API-Dokumentation-Seiten, die ich finden konnte auf android-Entwickler-Website, ein paar tutorials, android, Grafiken, LunarLander-source-code und diese Frage.
Bitte sagen Sie mir, welche dieser Aussagen sind wahr, welche nicht, und warum.
Canvas
hat seine eigeneBitmap
befestigt, um es.Surface
hat seine eigeneCanvas
attached to it.- Alle
View
's Fenster teilen die gleichenSurface
und so teilen sich die gleicheCanvas
. SurfaceView
ist Unterklasse vonView
, die, im Gegensatz zu anderenView
's Unterklassen undView
selbst, hat seine eigeneSurface
zu ziehen.
Dort ist auch eine weitere Frage:
- Warum gibt es eine Notwendigkeit für eine
Surface
Klasse, wenn es bereits eineCanvas
für high-level-Operationen mit bitmap. Geben Sie ein Beispiel einer situation, woCanvas
ist nicht geeignet für die Arbeit, dieSurface
tun können.
Kommentar zu dem Problem
Grafik-Architektur doc: source.android.com/devices/graphics/architecture.html
InformationsquelleAutor der Frage fyodorananiev | 2011-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige Definitionen:
Einer Oberfläche eines Objekts holding Pixel zusammengesetzt auf dem Bildschirm. Jedes Fenster, das Sie sehen auf dem Bildschirm (ein dialog, Ihr full-screen-Aktivität, die status-bar), hat seine eigene Oberfläche, es zieht zu, und Surface Flinger rendert diese, um die endgültige Anzeige in der richtigen Reihenfolge. Eine Oberfläche in der Regel mehr als einen Puffer (in der Regel zwei) zu tun double-buffered-rendering: die Anwendung kann eine Zeichnung seiner nächsten UI-Status, während die Oberfläche flinger compositing ist der Bildschirm mit dem letzten Puffer, ohne zu warten, für die Anwendung, um die Zeichnung fertigzustellen.
Fenster ist im Grunde wie Sie denken, der ein Fenster auf dem desktop. Es hat eine einzige Oberfläche, in die der Inhalt des Fensters gerendert wird. Eine Anwendung interagiert mit dem Window-Manager zu erstellen, die Fenster, die Fenster-Manager, wird eine Oberfläche erstellt, die für jedes Fenster und gibt es die Anwendung für das zeichnen. Die Anwendung ziehen kann, was es will, in der Oberfläche, in der Fenster-Manager ist es nur ein undurchsichtiges Rechteck.
Ein View ist eine interaktive UI-element innerhalb eines Fensters. Ein Fenster hat eine einzelne view-Hierarchie verbunden, auf dem alle das Verhalten des Fensters. Wann immer das Fenster neu gezeichnet werden muss (z.B. weil eine Ansicht hat, entwertet sich selbst) besteht, erfolgt diese in das Fenster der Oberfläche. Die Oberfläche ist gesperrt, das gibt eine Leinwand, die verwendet werden können, um zu zeichnen in. Eine Attraktion traversal erfolgt in der Hierarchie nach unten, übergabe der Leinwand, die für jede view zu ziehen, seinen Teil der UI. Wenn fertig, die Oberfläche ist freigeschaltet und veröffentlicht, so dass die gerade gezeichnet Puffer vertauscht in den Vordergrund, um dann kombiniert werden, um den Bildschirm durch die Oberfläche der Schleuderscheibe.
Einer SurfaceView ist eine spezielle Umsetzung von Anzeigen, die Sie erstellt auch seine eigene Oberfläche für die Anwendung direkt draw-in " (außerhalb des normalen view-Hierarchie, die sonst teilen muss, die Fläche für das Fenster). Das funktioniert einfacher, als Sie vielleicht erwarten-alle SurfaceView Fragen der Fenster-manager, um ein neues Fenster erstellen, sagt er zu Z-Reihenfolge, die Fenster entweder sofort vor oder hinter der SurfaceView die Fenster, und positionieren Sie es passend, wo die SurfaceView wird in der mit Fenster. Wenn die Oberfläche gelegt wird, hinter dem Hauptfenster (in der Z-Reihenfolge), SurfaceView auch füllt seinen Teil des Hauptfensters mit der Transparenz, so dass die Oberfläche gesehen werden kann.
Bitmap ist nur eine Schnittstelle um einige pixel Daten. Die Pixel zugeteilt werden kann, indem die Bitmap selbst wenn Sie direkt erstellen oder Sie kann gerichtet sein, um Pixel, die Sie nicht besitzen, wie das, was intern passiert, ein Haken, eine Leinwand bis zu einer Fläche für die Zeichnung. (Ein Bitmap erstellt, und wies auf die aktuelle Zeichnung Puffer von der Oberfläche).
Bitte auch im Hinterkopf behalten, dass, da dies impliziert, eine SurfaceView ist ein ziemlich schweres Objekt. Wenn Sie mehrere SurfaceViews in einer bestimmten UI, aufhören und darüber nachdenken, ob dies wirklich erforderlich ist. Wenn Sie mehr als zwei, Sie haben fast mit Sicherheit zu viele.
InformationsquelleAutor der Antwort hackbod
Hier ist eine sehr grundlegende und einfache konzeptionellen überblick darüber, wie die Interaktion geschieht unter dem Fenster, Oberfläche, Leinwand-und Bitmap.
Manchmal, eine visuelle Darstellung hilft viel beim Verständnis twisted Konzepte.
Ich hoffe, dass diese Grafik kann jemand helfen.
InformationsquelleAutor der Antwort Sabeeh
Bitmap ist einfach ein wrapper für eine Ansammlung von Pixeln. Betrachten Sie es als ein array von Pixeln mit einigen anderen praktischen Funktionen.
Die Leinwand ist einfach Klasse enthält alle Methoden des Zeichnens. Es ist ähnlich wie die Klasse Graphics im AWT/Swing, wenn Sie vertraut sind mit. Alle Logik auf, wie einen Kreis zu zeichnen, oder eine box, etc enthalten ist, im inneren Leinwand. Eine Leinwand wird auf eine Bitmap-oder eine open-GL-container, aber es gibt keinen Grund, warum es in der Zukunft ausgedehnt werden könnte, zu ziehen, auf andere Arten von raster.
SurfaceView ist eine Ansicht, die enthält eine Oberfläche. Eine Oberfläche ist ähnlich wie ein bitmap (pixel-store). Ich weiß nicht, wie es implementiert ist, aber ich würde vorstellen, es ist eine Art von Bitmap-wrapper mit zusätzlichen Methoden für Dinge, die direkt mit dem Bildschirm zeigt (das ist der Grund für eine Oberfläche, eine Bitmap zu generisch). Sie können eine Leinwand, die aus Ihrer Oberfläche, die ist echt der Leinwand im Zusammenhang mit den zugrunde liegenden Bitmap.
Ihre Fragen.
Ja, eine Leinwand fährt auf einer Bitmap (oder eine open-GL-panel). Oberfläche gibt Ihnen eine Leinwand, auf was auch immer Oberfläche ist mit für die Bitmap-Stil pixel-store.
Nicht. Sie hätte so viele Oberflächen-Ansichten, wie Sie wollen.
Ja. Wie ListView-Steuerelement ist eine Unterklasse von View, hat seine eigene Liste-Daten-Struktur. Jede Unterklasse von View macht etwas anderes.
InformationsquelleAutor der Antwort monkjack