2015-02-06 10 views
34

Ich implementierte einen Bildübergang zwischen zwei Aktivitäten mit den neuen gemeinsamen Elementen von Lollipop. Es funktioniert, aber während des Übergangs bekomme ich ein merkwürdiges Weiß auf dem gesamten Bildschirm und ich kann nicht herausfinden, wie ich es loswerden kann. Hier ein Beispiel: Status bar also blinkingBlinkender Bildschirm beim Bildübergang zwischen Aktivitäten

Hier ist, wie die zweite Aktivität

gestartet wird
public static void launch(
      @NonNull Activity activity, @NonNull View transitionView, Game game) { 
     ActivityOptionsCompat options = 
       ActivityOptionsCompat.makeSceneTransitionAnimation(
         activity, transitionView, game.gameFullId); 
     Intent intent = new Intent(activity, ListImportationLoginActivity.class); 
     intent.putExtra(INTENT_EXTRA_GAME, retailer); 
     ActivityCompat.startActivity(activity, intent, options.toBundle()); 
    } 

Dann in onCreate:

ViewCompat.setTransitionName(mLogoView, mGame.gameFullId); 

Und die Themendatei:

<resources> 
    <style name="Theme.MyApp.NoActionBar" parent="Theme.MyApp.NoActionBar.Base"> 
     <item name="android:windowContentTransitions">true</item> 
     <item name="android:windowAllowEnterTransitionOverlap">true</item> 
     <item name="android:windowAllowReturnTransitionOverlap">true</item> 
     <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> 
     <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 
    </style> 
</resources> 

Dank für Ihre Hilfe

+0

kann u senden Sie mir bitte Code dieser Animation ich versuche, es für ein langes –

Antwort

21

Auf der austretenden Aktivität, rufen getWindow().setExitTransition(null);

Auf der eintretenden Aktivität, rufe getWindow().setEnterTransition(null);

Es wird die Ausblendung der austretenden Aktivität und die Einblendung der eintretenden Aktivität zu verhindern, was den scheinbaren Blink-Effekt beseitigt.

+1

sollte dies die akzeptierte Antwort sein. –

+1

Funktioniert wie ein Charme –

+1

wo diesen Code onCreate() schreiben? –

15

Die „weiße blinkt“ Sie sehen, ist das Ergebnis der beiden Aktivitäten alpha-belebende und aus während des Übergangs: wenn Aktivität A Aktivität beginnt B, Aktivität A ausblendet und Aktivität B Blendungen in

Wenn. Wenn Sie verhindern möchten, dass die Statusleiste und/oder die Navigationsleiste während des Übergangs verblassen (und somit den "blinkenden" Effekt ein wenig reduzieren), können Sie unter this post nachsehen.

+0

ich mich gefragt, ob Sie mir helfen könnten mit diese Frage http://goo.gl/d5opg5. Es ist keine dieser "fix-this-for-me" -Fragen, das verspreche ich. – Axel

+0

Bitte geben Sie den relevanten Teil der Quelle in Ihrer Antwort an. –

1

Ich hatte ein ähnliches Problem. Ich löste die blinkende Statusleiste und die Navigationsleistenprobleme, indem ich sie vom Übergang ausschließe, wie es von @ Alex vorgeschlagen wurde, aber der Bildschirm blinkte immer noch, wenn zwischen den Aktivitäten gewechselt wurde. Als ich die "finish() entfernt" Anweisung nach startActivity(); Der Bildschirm hörte auf zu blinken. Mai war es wegen der Schließung der Anrufaktivität. Hoffe, das hilft jemandem.

8

Ich löste dieses Problem, indem ich Hintergrundfarbe meines Standardthemas änderte, hoffe, dass es immer noch jemandem helfen kann, die Zeit zu sparen.

<item name="android:windowBackground">@color/black</item> 
<item name="android:colorBackground">@color/black</item> 
+5

Ich habe '@android: color/transparent' dank dieser Frage benutzt, da alle anderen Fehler verursacht haben. Prost! –

7

eine Methode in Helfer Stellen wie

public static Transition makeEnterTransition() { 
    Transition fade = new Fade(); 
    fade.excludeTarget(android.R.id.navigationBarBackground, true); 
    fade.excludeTarget(android.R.id.statusBarBackground, true); 
    return fade; 
} 

es in der Tätigkeit ausführen, die Sie dieses

getWindow().setEnterTransition(TransitionUtils.makeEnterTransition()); 

Quelle https://github.com/alexjlockwood/custom-lollipop-transitions/

+1

Wie wäre es mit den Nexus-Geräten mit Softkey-Leiste an der Unterseite? Wie lautet die ID dieser Leiste, damit wir sie auch aus der Animation ausschließen können? –

0

Elemente ein- und ausgeblendet, es sei denn, Sie beginnen explizit angeben, dass sie für beide Aktivitäten identisch sind. Dazu gehören Status und Navigationsleiste.

In Ihrem Fall würde ich die Symbolleiste und diese beiden Ansichten auf die gemeinsam genutzte Elemente Liste hinzu:

List<Pair> viewPairs = new ArrayList<>(); 
viewPairs.add(Pair.create(findViewById(android.R.id.statusBarBackground), Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME)); 
viewPairs.add(Pair.create(findViewById(android.R.id.navigationBarBackground), Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME)); 
// Add your views... 

Pair[] array = new Pair[viewPairs.size()]; 
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), viewPairs.toArray(array)).toBundle(); 
// ... 

ActivityCompat.startActivity(activity, intent, options.toBundle()); 
1

In meiner Situation hat die zweite Aktivität kein Statusleiste aufweisen, die in der Tätigkeit definiert wurde Thema mit diesem Tag.

<item name="android:windowFullscreen">true</item> 

Da es nicht zwingend notwendig war, die Statusleiste im Portrait-Modus zu verstecken, entfernte ich diesen Tag und manuell ein-/ausblenden die Statusleiste bei Bedarf und das Blinken weg ist.

2

Ich hatte ähnliche blinkende Probleme und versuchte viele der hier genannten Beispiele, aber für mich hat es die Probleme nicht gelöst. Was für mich funktionierte, war, den Fensterhintergrund für das zweite Aktivitätsthema transparent zu machen. (@Webdma verwendet schwarz, aber in meinem Fall, dass der Bildschirm schwarz statt weiß blinkend)

1

Einige nützliche Antworten oben. Soweit ich verstehe, wird dies durch Aktivitätsübergangsüberlappung verursacht. Um dieses Problem zu überwinden, habe ich die folgenden Werte in den onCreate() Methoden beiden Aktivitäten verwendet:

getWindow().setAllowEnterTransitionOverlap(false); 
getWindow().setAllowReturnTransitionOverlap(false); 
Verwandte Themen