Wie wende ich eine Folienanimation zwischen zwei Aktivitäten in Android an?
Lesezeit: 10 Minuten
Jignesh Ansodariya
Ich möchte einen Gleiteffekt von links nach rechts erzielen, wenn ich mich von einer Aktivität zur anderen bewege. Dafür verwende ich den folgenden Code, aber ich bekomme keine Ergebnisse. Bitte korrigieren Sie mich.
Ich habe diesen Code verwendet: overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); Sie können diese Beispiele in sehen GmailAnimation oder LopeAnimationen. Darin sieht man auch mehr Bloggen.
– Cabezas
15. Februar 2017 um 12:08 Uhr
Geboren um zu gewinnen
Fügen Sie diese beiden Dateien im Ordner res/anim hinzu.
Danke – Wo soll ich jetzt die umgekehrte Animation platzieren, wenn ich durch Drücken der Zurück-Taste zur alten Aktivität zurückkehre?
– Em Ae
8. Dezember 2015 um 2:43 Uhr
@EmAe, ich habe eine ähnliche Frage gestellt und hier selbst beantwortet: stackoverflow.com/questions/39711666/…. Hoffe es wird dir helfen!
– P. Kuijpers
7. Dezember 2016 um 19:54 Uhr
@Born To Win Wenn möglich, können Sie eine umgekehrte Animation hinzufügen.
– Amit Vaghela
31. Mai 2018 um 13:04 Uhr
sind die anim nicht falsch herum? Es ist (enterAnim, exitAnim)
– hmac
29. Juli 2021 um 13:31 Uhr
Shohan Ahmed Sijan
Sie können Ihre standardmäßige Aktivitätsanimation überschreiben und sie funktioniert besser als overridePendingTransition. Ich verwende diese Lösung, die für jede Android-Version funktioniert. Kopieren Sie einfach 4 Dateien und fügen Sie einen 4-Zeilen-Stil wie folgt hinzu:
Erstellen Sie eine „CustomActivityAnimation“ und fügen Sie diese Ihrem Basisdesign durch „windowAnimationStyle“ hinzu.
Ich verwende Android 6 Huawei und es funktioniert sehr gut. 🙂
– Shohan Ahmed Sijan
8. Mai 2017 um 12:27 Uhr
sehr schön … funktioniert sehr gut … wir müssen nicht in aller Absicht hinzufügen, dass dies ein Vorteil dieser Methode ist … als Shohan
– Manthan Patel
30. Oktober 2017 um 6:20 Uhr
Ich liebe solche Lösungen! Legen Sie es an einen Ort und funktioniert überall wie ein Zauber!
– vepzfe
13. Dezember 2018 um 13:19 Uhr
Dies ist die beste Lösung. Keine Notwendigkeit, in Java/Kotlin zu programmieren. Legen Sie einfach diese XML-Dateien ab und alles ist einfach erledigt.
– Mohit Rajput
19. Februar 2020 um 7:08 Uhr
Dies ist eine magische Lösung und verdient 1000 Upvotes. So einfache und elegante Lösungen findet man selten. Und das Beste daran ist, dass keine hässliche lange Codierung erforderlich ist, einfach XML erledigt alles.
– Zeeshan
26. Juli 2020 um 13:37 Uhr
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
new Handler().postDelayed(new Runnable() {
public void run() {
/* Create an intent that will start the main activity. */
Intent mainIntent = new Intent(SplashScreen.this,
ConnectedActivity.class);
mainIntent.putExtra("id", "1");
//SplashScreen.this.startActivity(mainIntent);
startActivity(mainIntent);
/* Finish splash activity so user cant go back to it. */
SplashScreen.this.finish();
/* Apply our splash exit (fade out) and main
entry (fade in) animation transitions. */
overridePendingTransition(R.anim.mainfadein,R.anim.splashfadeout);
}
}, SPLASH_DISPLAY_TIME);
}
Bitte vermeiden Sie diese Art von verzögertem Aktivitätsstart! Es startet Ihre MainActivity, auch wenn Ihre App nicht mehr im Vordergrund ist.
– Benoît
10. April 2019 um 9:49 Uhr
Schieben Sie mit Alpha-Animation mit ein paar Notizen nach oben / unten
startActivity(new Intent(this, SecondActivity.class));
overridePendingTransition(R.anim.slide_up, R.anim.no_animation); // remember to put it after startActivity, if you put it to above, animation will not working
// document say if we don't want animation we can put 0. However, if we put 0 instead of R.anim.no_animation, the exist activity will become black when animate
Ich versuche, die Folienanimation wie eine iOS-Animation zu machen, wenn ein Ansichtsmodell vorhanden ist (wie diese https://www.youtube.com/watch?v=deZobvh2064) aber scheiterte.
Wenn Sie sich die aktuelle iOS-Animation ansehen, werden Sie sehen: Die Animation von unten mit Alpha (ca. 50%), dann geht es sehr schnell, dann langsamer, die Animationszeit beträgt ungefähr> 500 ms (ich verwende Trim-Video-Tools, um die Animationszeit zu zählen https://www.kapwing.com/trim-video also kann es nicht genau 100%)
Dann versuche ich, mich auf Android zu bewerben.
Um Alpha zu machen, verwende ich <alpha> und Erfolg.
Damit die Animation schneller startet als langsamer, verwende ich android:interpolator="a decelerate interpolator" aber es wäre fast gescheitert.
Es gibt 3 Standardwerte decelerate interpolator im Android @android:interpolator/decelerate_quad -> Faktor = 1 @android:interpolator/decelerate_cubic -> Faktor = 1,5 @android:interpolator/decelerate_quint _> Faktor = 2,5
(höherer Faktor <=> Animation startet am Anfang schneller und am Ende langsamer)
Hier ist eine gute Anleitung http://cogitolearning.co.uk/2013/10/android-animations-tutorial-5-more-on-interpolators/ um es zu verstehen
Ich habe 3 oben versucht, ich kann es nicht wie iOS erreichen, die Animation kann nicht schneller starten als iOS. Dann erstelle ich einen benutzerdefinierten decelerateInterpolator mit Faktor = 3 wie
und ich steigere die Dauer mal ab 500 -> 750. Es funktioniert gut (sehr ähnlich wie iOS). Es funktioniert jedoch nur auf einigen Geräten gut, auf einigen Geräten ist die Animation ziemlich langsam. Später weiß ich, dass die Animation auf verschiedenen Geräten unterschiedlich sein kann (z. B. einige Geräte werden schneller und einige langsamer), sodass ich die Animation nicht auf allen Android-Geräten ähnlich machen kann. Daher benutze ich nicht interpolator. Ich weiß nicht, ob mein Test genau 100 % ist oder nicht, aber ich hoffe, diese Erfahrung hilft
Rohit Singh
Hier ist eine Folienanimation für Sie.
Angenommen, Sie haben zwei Aktivitäten.
MovieDetailActivity
AllCastActivity
Und auf Knopfdruck passiert das.
Sie können dies in 3 einfachen Schritten erreichen
1) Inhaltsübergang aktivieren
Gehen Sie zu Ihrem style.xml und fügen Sie diese Zeile hinzu, um den Inhaltsübergang zu aktivieren.
2) Schreiben Sie den standardmäßigen Eintritts- und Austrittsübergang für Ihre AllCastActivity
public void setAnimation()
{
if(Build.VERSION.SDK_INT>20) {
Slide slide = new Slide();
slide.setSlideEdge(Gravity.LEFT);
slide.setDuration(400);
slide.setInterpolator(new AccelerateDecelerateInterpolator());
getWindow().setExitTransition(slide);
getWindow().setEnterTransition(slide);
}
}
3) Aktivität mit Absicht starten
Schreiben Sie diese Methode in Ihre MovieDetailActivity anfangen AllCastActivity
public void startActivity(){
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putStringArrayListExtra(MOVIE_LIST, movie.getImages());
if(Build.VERSION.SDK_INT>20)
{
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(BlankActivity.this);
startActivity(i,options.toBundle());
}
else {
startActivity(i);
}
}
Am wichtigsten!
legen Sie Ihre setAnimation()Methode vor setContentView() Methode andernfalls funktioniert die Animation nicht.
Also dein AllCastActivity.javasollte so aussehen
Ich habe diesen Code verwendet:
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Sie können diese Beispiele in sehen GmailAnimation oder LopeAnimationen. Darin sieht man auch mehr Bloggen.– Cabezas
15. Februar 2017 um 12:08 Uhr