0

Ich baue eine App, wo ich Bilder wischen möchte, als ob sie Fotos auf einem Stapel waren. Mit anderen Worten, wenn ich das oberste Bild wische, möchte ich, dass es animiert, sich in die Richtung des Wischens zu bewegen, und das nächste Bild unter ihm ist die ganze Zeit sichtbar. Um dies zu erreichen, verwende ich einen FrameLayout und zwei ImageView Container. Ich wechsle nur, welcher oben ist. In der Zwischenzeit, sobald ein Wischen auftritt, wird das nächste Bild in den ImageView auf der Rückseite unter Verwendung setBackground(drawable) geladen. Mein Problem ist, dass das ImageView auf der Rückseite sein Bild nicht aktualisiert, bis ich bringToFront() darauf nenne, was bedeutet, dass, wie die oberen ImageView animiert, das Bild darunter ist falsch, bis die Animation abgeschlossen ist, an welchem ​​Punkt es abrupt ändert richtiges Bild. Ich habe versucht, invalidate() auf der Rückseite ImageView nach setBackground(drawable) anzurufen, aber das funktioniert nicht. Hat jemand irgendwelche Ideen, wie ich das Image aktualisieren kann, während es dahinter steckt?Android: ImageView Hintergrund aktualisieren, während hinter anderen ImageView

UPDATE: Es stellt sich heraus, ich bin gerade nicht sehr darauf heute. Ich habe das falsche ImageView aktualisiert und weil das Laden des Bildes aus dem Netzwerk gemacht wurde, gab es gerade genug Verzögerung, um mich denken zu lassen, dass es geschah, nachdem die Animation beendet wurde.

Antwort

0

Klingt für mich wie Sie wollen so etwas wie eine Image Slider.

Es gibt große Bibliotheken zu diesem Zweck vorhandenen, dieser zum Beispiel:

https://github.com/daimajia/AndroidImageSlider


Wenn Sie wollen nicht diese, sind hier einige Tipps:

  • Bilder auf ImageView s werden mit setImageDrawable(Drawable)

  • festgelegt
  • Wenn Ihre Animation startet, stellen Sie das neue Bild auf Ihre ImageView hinter und schieben Sie den sichtbaren weg.

  • Wenn die sichtbare ImageView weg geschoben hat, setzen sie die Sichtbarkeit zu GONE ist und es hinter dem zweiten ImageView bewegen

Tun Sie dies für jedes Mal, wenn ein neues Bild geladen wird.

Dies sollte eigentlich funktionieren.

+0

Ich muss in AndroidImageSlider schauen, aber in der Zwischenzeit sind diese Schritte im Wesentlichen genau das, was ich tue. Ich wechselte von 'setBackground (drawable)' zu 'setImageDrawable (drawable)', aber das machte keinen Unterschied. Die anderen zwei Schritte sind, was ich tue. Ich denke, das Problem ist, dass 'ImageView' sein Bild nicht aktualisiert, es sei denn, die z-Position ist oben, oder so ähnlich. Ich kann einfach nicht herausfinden, wie man es zwingt, es neu zu zeichnen, bevor es oben ist. – Nick

+0

Vielleicht postest du deinen Code, damit ich ihn überprüfen kann. – Axel

+0

Ich fühle mich verlegen ... Es stellte sich heraus, dass ich den falschen 'ImageView' updated hatte, was das Problem verursacht hat. Ich stimme dir zu, dass du Recht hast, aber ich habe nicht genug Ansehen. Danke für Ihre Hilfe! – Nick

0

Sie benötigen einen „ViewPager“

https://developer.android.com/training/animation/screen-slide.html

Es verfügt über alle notwendigen Handgriffe „N“ Anzahl von Bildern aufzunehmen - Standard-Handler - - effiziente Speicherverwaltung auch mehrere Swipe-Animationen unterstützt - Prefetching - Sie sind alle in einem Fest mit diesem !!

Stellen Sie sicher, dass Sie das "ImageView" im Layout der "Seiten" erhalten, die Sie auf dem "ViewPager" entwickeln möchten.

+0

Danke für die Antwort! Ich hatte über einen ViewPager nachgedacht, wollte aber nicht so viele Fragmenttransaktionen. Danke noch einmal! – Nick

+0

@Nick irgendeinen Grund, warum Sie keine Fragmenttransaktionen wünschen? Es wird Ihre App nur mit unabhängigem Lebenszyklus besser machen und Pre-Fetch wird automatisch ausgeführt, wenn der Benutzer ein Bild wischt – takrishna