Ich habe eine Übergangsanimation für gemeinsam genutzte Elementaktivitäten zwischen MainActivity (GridView) und DetailActivity implementiert. Wenn auf das Objekt geklickt wird, wird das Bild im Rasterelement vergrößert, um zum Hintergrundbild in DetailActivity zu werden. Ich habe den Übergang sehr glatt gemacht, indem ich das Bild auf der MainActivity in eine Datei gespeichert habe, dann benutze es als Platzhalterbild in DetailActivity, bevor das Bild mit der höheren Qualität über Picasso heruntergeladen wird. Wenn Picasso seine Aufgabe erledigt hat, wird das Bild mit höherer Qualität den Platzhalter sehr gut ersetzen.Wie verzögert man das Laden von Picasso-Bildern?
-Code von onCreateView() in DetailActivityFragment.java
ImageView iv = (ImageView) mRootview.findViewById(R.id.movie_poster);
try {
// Prepare "InterimPoster" jpeg file to be placeholder image
Bitmap bitmap = BitmapFactory.decodeStream(c.openFileInput("InterimPoster"));
Picasso.with(c).load("http://image.tmdb.org/t/p/w780" + mMovieInfo[2])
.placeholder(new BitmapDrawable(getResources(), bitmap))
.fit()
.centerCrop()
.noFade()
.into(iv);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Wie für Animation, ich habe es wie in dem Link hier Schritt 1-3 https://guides.codepath.com/android/Shared-Element-Activity-Transition
implementieren jedoch manchmal ist es flackert, wenn die höhere Qualität Bild fertig heruntergeladen, bevor die Übergangsanimation abgeschlossen ist. Das einzoomende Bild wird während der Bewegung durch ein neues Bild ersetzt, was eine unangenehme Animation ist.
Also frage ich mich, wie kann ich dieses Flimmern beheben? Eine Sache, an die ich denken kann, ist, den Bild-Download zu verzögern, weil ich bereits ein Bild mit geringerer Qualität als Platzhalter habe. Wie kann ich das machen?
Here the video. Normalerweise ist es auf meinem Testgerät 80% der Zeit flüssig, aber glücklicherweise flackert es in diesem Video die meiste Zeit.
Ich denke, das Flimmern ist wegen noFade(). Versuchen Sie, das zu entfernen. – user3215142
Nein, ich setze absichtlich noFade() ein, denn sonst flackert es immer, auch wenn das Laden nach der Animation beendet ist. –