Ich versuche, zwei Bilder in meiner App zu überlagern, aber sie scheinen in meiner canvas.setBitmap()
Zeile abzustürzen . Was mache ich falsch?
private void test() {
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.t);
Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.tt);
Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig());
Canvas canvas = new Canvas();
canvas.setBitmap(bmOverlay);
canvas.drawBitmap(mBitmap, new Matrix(), null);
canvas.drawBitmap(mBitmap2, new Matrix(), null);
testimage.setImageBitmap(bmOverlay);
}
Antworten:
Sie können die komplexe Canvas-Manipulation überspringen und dies vollständig mit Drawables tun
LayerDrawable
. Sie haben zwei Möglichkeiten: Sie können es entweder in XML definieren und dann einfach das Image festlegen oder einenLayerDrawable
dynamischen Code konfigurieren .Lösung Nr. 1 (über XML):
Erstellen Sie eine neue Drawable-XML-Datei. Nennen wir sie
layer.xml
:Stellen Sie nun das Bild mit diesem Drawable ein:
Lösung 2 (dynamisch):
(Ich habe diesen Code nicht getestet, daher liegt möglicherweise ein Fehler vor, aber diese allgemeine Gliederung sollte funktionieren.)
quelle
OK, nur damit Sie wissen, dass es ein Programm namens DroidDraw gibt. Es kann Ihnen helfen, Objekte zu zeichnen und übereinander zu versuchen. Ich habe Ihre Lösung ausprobiert, aber ich hatte eine Animation unter dem kleineren Bild, sodass dies nicht funktionierte. Aber dann habe ich versucht, ein Bild in einem relativen Layout zu platzieren, das sich vermutlich zuerst darunter befindet, und dann habe ich das andere Bild gezeichnet, das vermutlich überlagert wird, und alles hat großartig funktioniert. Also RelativeLayout, DroidDraw und du kannst loslegen :) Einfach, keine Art von Jiggery Pockery :) und hier ist ein bisschen Code für dich:
Das Logo befindet sich oben auf dem Shazam-Hintergrundbild.
quelle
Sie können den folgenden Code verwenden, um das Problem zu lösen, oder die Demo hier herunterladen
Erstellen Sie jeweils zwei Funktionen.
Zuerst wird die Leinwand gezeichnet und die Bilder werden ab Punkt (0,0) übereinander gezeichnet.
Klicken Sie auf die Schaltfläche
Funktion zum Erstellen eines Overlays.
Weiterlesen
quelle
Es ist eine etwas späte Antwort, aber es behandelt das Zusammenführen von Bildern aus URLs mit Picasso
MergeImageView
xml
Beispiel
quelle
Das ist meine Lösung:
Verwendung :
oder
und die Ergebnisse:
Überlagerungsmodus:
Bildschirmmodus:
quelle