2017-07-03 2 views
1

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.

+1

Verwenden Sie die Standard-Fade-Animationen, anstatt Ihre eigenen zu erstellen. Lies dies: https://developer.android.com/training/transitions/transitions.html –

+0

Danke, ich habe versucht, die Android-Standard-Animationen zu verwenden, aber immer noch kein Ergebnis ... – Lilamuse

+0

Was hast du mit Standard-Android-Anim versucht? Sie sollten mit der Fade-Klasse gut funktionieren! –

Antwort

2

Fügen Sie diese Option Bundle Ihre startActivity Methode verblasst anim zwischen zwei Aktivitäten zu machen:

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), 
     android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
     startActivity(intent, bundle); 

Es gibt keine Notwendigkeit, jeden weiteren Code hinzufügen zu erreichen, was Sie gefragt! :)

+0

Funktioniert immer noch nicht ...:/ – Lilamuse

0

Ich hatte ähnliche Probleme mit Animationen zwischen Aktivitäten.

Ich weiß, Sie sagen, Sie es schon versucht, aber die

Intent intent = new Intent(this, MainActivity.class); 
startActivity(intent); 
overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 

Lösung sollte so lange arbeiten, wie Sie nicht um mit anderen Fensteranimationen versaut haben. Vielleicht hat es mit einer Kombination von möglichen Lösungen nicht richtig funktioniert? Versuchen Sie, die anderen zu entfernen und haften Sie mit dieser Lösung

+0

Ich versuchte jede Lösung getrennt und das war mein nur Fensteranimation. Nur um sicherzugehen, dass ich es noch einmal versucht habe, aber es gibt keinen Effekt. Was ich getan habe, nachdem keiner meiner Versuche erfolgreich war, habe ich eine "Einblendung" für meine Aktivitäten erstellt, die möglicherweise eingeblendet werden muss. Ich werde meine Frage bearbeiten, um den Code hinzuzufügen, den ich verwendet habe, weil er meinen Kommentar abgibt zu lang, wenn ich versuche, es hier zu posten. – Lilamuse

Verwandte Themen