Zeichnen, hintergrund, benutzerdefinierte Ansicht aus .png-Datei auf Android
Erstellte ich eine benutzerdefinierte Ansicht durch die Erweiterung aus dem Blickfeld. In onDraw() habe ich es geschafft, ziehen einige Kreise und andere Sachen. Jetzt will ich aber hinzufügen, einen hintergrund aus einer Ressource (sd-Karte oder ein stream), die tatsächlich eine Karte, die ich herunterladen von unserem server und als auf Sie zu ziehen. Es ist für Android 8+
@Override
protected void onDraw(Canvas canvas) {
Canvas g = canvas;
String file = "/mnt/sdcard/download/tux.png";
Bitmap bg = null;
try {
bg = BitmapFactory.decodeFile(file);
g.setBitmap(bg);
} catch (Exception e) {
Log.d("MyGraphics", "setBitmap() failed according to debug");
}
}
Irgendwie g.setBitmap(bg) hält fehlschlägt, habe ich noch nicht angeschaut, das Bild, specs, aber eigentlich ist es nur ein tux-Bild (24 bit Farben) PNG-format.
Kann jemand mir ein paar Tipps geben, wie man ein Hintergrundbild hinzufügen, so kann ich auf Sie zu ziehen?
Danke.
InformationsquelleAutor AndaluZ | 2012-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du eigentlich gar nicht ziehen wollen auf das bitmap, das Sie laden, Sie wollen einfach nur ziehen Sie es auf die Leinwand, so dass Sie verwenden sollten, Leinwand.drawBitmap(). Sie auch wirklich nicht laden einer Bitmap in jedem onDraw(), tun Sie es im Konstruktor statt. Versuchen Sie, diese Klasse:
Lassen Sie auch Android-zeichnen Sie die bitmap im hintergrund:
Wenn Sie versuchen, meinem ersten Beispiel, was genau funktioniert nicht? Eine Ausnahme (wenn ja, welche Ausnahme)? Nichts wird auf dem Bildschirm gezeichnet? Welche Android-version verwendest du? Kannst du den genauen code, den Sie verwenden, die Sie erwarten, um zu arbeiten, sondern das nicht?
Es funktioniert, mein Freund, mit .png als auch als .jpg. Nach deinem post war ich noch spielen und versuchen ein paar Bilder aus und fand heraus, dass nicht alle .jpeg-Dateien arbeiten. Wenn ich kleine jpg-Bilder, wie 50 KB funktioniert es, aber bei der Verwendung von größeren jpg-Bilder, wie 600 KB hintergrund stellt sich ganz in weiß. Ich weiß nicht, ob es hat zu tun mit der Bild-Größe, verursachen jene, die nicht arbeiten, hat viel größere Größe als meine Ansicht der Immobilien. Mit setBackgroundDrawable() funktioniert, aber es schrumpft auch der Ansicht Immobilien Größe.
InformationsquelleAutor Martin Nordholts
Ich habe Angst, dass Sie bekommen, OutOfMemoryError, Ursache onDraw aufgerufen wird viele Male während der view-lifecycle, und jedes mal, wenn Sie allokierung von Speicher für neue bitmap. Nur machen die bg-Mitglied (vielleicht statisch) Ihrer Klasse, und laden Sie es nur einmal - im view-Konstruktor. Und vergessen Sie nicht zu recyceln bitmap auf Sicht trennen.
Ok, ich fand heraus, dass bg = BitmapFactory.decodeFile(Datei); liefert eine unveränderliche bitmap, was bedeutet, dass ich kann nicht zeichnen. Kann jemand bitte geben Sie mir nur ein einfaches Beispiel, wie das laden einer Grafik aus einer Datei (oder einem bytearray) und legen Sie es als Hintergrundbild in eine benutzerdefinierte Ansicht, so kann ich auf Sie zu ziehen in der onDraw () - handler der view? Nur ein einfaches Beispiel, vielen Dank.
Ich kann es schlagen zwei Möglichkeiten der Herstellung einer solchen Sache: 1) rufen intern Anzeigen.setBackgroundDrawable() (zuvor müssen Sie erstellen BitmapDrawable aus bitmap); 2) Aufruf von g ist.drawBitmap() anstelle von g ist.setBitmap(). In diesem Fall sind Sie nicht ersetzen canvas-Quelle, sondern ziehen in den es.
Ja, thnx, BitmapDrawable hat den trick für mich. Ich habe jetzt, um herauszufinden, wie es zu zeigen, ohne Skalierung, etc.. aber das ist eine andere Geschichte, danke.
InformationsquelleAutor OleGG