Ich versuche, einen Fade-Effekt hinzuzufügen, wenn meine Splash-Screen-Aktivität beendet und/oder wenn meine Hauptaktivität beginnt (idealerweise würde die Hauptaktivität nach dem Splash-Bildschirm einblenden, aber ich versuche alles). Ich habe viele Dinge ausprobiert, die mit Animationen und Übergängen zu tun haben, aber keiner von ihnen hat bisher funktioniert. Wie Sie sehen können, bin ich überhaupt nicht mit Animationen vertraut, und ich bin mir bewusst, dass mein Problem wahrscheinlich von meinem Mangel an Wissen darüber herrührt. Ich habe viel gelesen, fühle mich aber immer noch verloren.Fade-Effekt zwischen zwei Aktivitäten auf Android
Ich frage mich, ob die Tatsache, dass meine SplashActivity kein Layout als Inhaltsansicht hat, meine Ergebnisse beeinflusst hat. Ich verwende nur ein Thema für die Splash-Screen-Aktivität. Hier ist seine Umsetzung im Manifest:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
und das Thema (zunächst ohne die 2 letzten Artikel):
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/launch_logo</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
Ich habe auch versucht, einen "fade in Thema" zu meinem MainActivity hinzuzufügen:
<style name="AppTheme.FadeIn" parent="AppTheme" >
<item name="android:windowNoTitle">true</item>
<item name="android:activityOpenEnterAnimation">@anim/fade_in</item>
</style>
In Bezug auf die Animation, sah ich, dass die Menschen mit manchmal wurden:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="1000" />
</set>
während andere Male mit:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="1000" />
Also habe ich versucht, beide ... (optional Frage: Was ist der Unterschied zwischen ihnen)
In SplashActivity, habe ich versucht:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
und
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getBaseContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
Auch versucht dies in MainActivity des onCreate Funktion:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ViewGroup mRootView = (ViewGroup) findViewById(R.id.main_layout);
Fade mFade = new Fade(IN);
// Start recording changes to the view hierarchy
TransitionManager.beginDelayedTransition(mRootView, mFade);
und
ViewGroup mRootView = (ViewGroup) findViewById(R.id.main_layout);
mRootView.animate().alpha(0.0f); // at this point the view is totally transparent
mRootView.animate().alpha(1.0f).setDuration(2000); // here the view becomes 100% visible instantly, there is no animation
, die das Layout der Haupttätigkeit ist:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:weightSum="16"
android:background="@color/background"
android:animateLayoutChanges="true"
tools:context=".MainActivity">
...
ich, dass Übergangsanimation Skala war in meinen Einstellungen korrekt geprüft (I Android bin mit Studios Emulator für meine Tests). Zwischen meinen beiden Aktivitäten gab es nie einen verblassenden Effekt. Bitte jemand erleuchte mich.
.
.
Aus irgendeinem Grund habe ich eine Art von Fade-Effekt, wenn ich dies tun:
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getBaseContext(),
android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
Ich verstehe nicht wirklich. Natürlich wird es schwarz, aber der Einblendeffekt der Hauptaktivität funktioniert, aber ich verstehe nicht, warum es so funktioniert. Wenn ich eine einzelne Zeile lösche, funktioniert es nicht mehr (ich habe festgestellt, dass es so funktioniert, als ich vergessen habe, den zweiten startActivity-Befehl zu kommentieren).Wenn ich sage, dass ich versuchte, eine Zeile zu löschen, änderte ich auch die Reihenfolge wie folgt:
.
.
.
.
.
Ich poste hier nur, was ich getan habe, nachdem ich alle vorherigen Lösungen (die ich jeweils getrennt probiert habe) versäumt habe. Ich füge ein Boolesches Extra an die Absicht an, wenn ich beim Öffnen meiner nächsten Aktivität einen Fade-In-Effekt erhalten möchte. Dann in der onCreate Methode der Öffnung Aktivität, die ich habe:
boolean fadeEffect = getIntent().getBooleanExtra("fade_in", false);
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.login_main_layout);
if(fadeEffect) {
mainLayout.setAlpha(0.f);
mainLayout.animate()
.alpha(1.f)
.setDuration(1000)
.start();
}
Wenn jemand Hilfe der Durchführung dieser Art von Lösung braucht, kann ich helfen.
Verwenden Sie die Standard-Fade-Animationen, anstatt Ihre eigenen zu erstellen. Lies dies: https://developer.android.com/training/transitions/transitions.html –
Danke, ich habe versucht, die Android-Standard-Animationen zu verwenden, aber immer noch kein Ergebnis ... – Lilamuse
Was hast du mit Standard-Android-Anim versucht? Sie sollten mit der Fade-Klasse gut funktionieren! –