2016-01-28 18 views
9

Ich versuche Activity Transitions zu implementieren, aber ich kann die Effekte nicht sehen. Hier ist der Code für meine erste Tätigkeit:Aktivitätsübergänge funktionieren nicht

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_architecture); 
     setUpWindowAnimations(); 
    } 

private void setUpWindowAnimations() { 
     if (android.os.Build.VERSION.SDK_INT >= 21) { 
      Log.i("ANIM", "Fade called"); 
      Fade fade = new Fade(2); 
      fade.setDuration(3000); 
      getWindow().setExitTransition(fade); 
     } 
    } 

Hier ist der Code für die zweite Aktivität:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_image); 
     setUpWindowAnimations(); 
    } 

private void setUpWindowAnimations() { 
     if (android.os.Build.VERSION.SDK_INT >= 21) { 
      Log.i("ANIM", "slide called"); 
      Slide slide = new Slide(Gravity.LEFT); 
      slide.setDuration(3000); 
      getWindow().setEnterTransition(slide); 
     } 
    } 

Auch wenn ich gesetzt haben Fade Out-Animation gibt es kein Verblassen, auch, Slide arbeitet in Standardweg, dh die Richtung ist UNTEN statt LINKS.

Here ist meine values/style.xml und here ist meine v21/styles.xml.

Hier ist meine AndroidManifest.xml:

<application 
     android:name=".MyApplication" 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:largeHeap="true" 
     android:theme="@style/AppTheme"> 

Warum sind diese Übergänge nicht funktioniert und wie sie funktioniert. Ich habe paste.ubuntu.com verwendet, weil der SO-Editor XML nicht korrekt anzeigt.

+0

Haben Sie einen Stil in 'styles.xml' mit Ihrem benutzerdefinierten Übergang definiert? –

+0

@IgorGanapolsky Nein, habe ich nicht. Du kannst beide meine 'styles.xml' überprüfen, ich habe einen Link gesetzt. –

+0

Der paste.ubuntu Link, den Sie einfügen, funktioniert nicht. –

Antwort

2

Erklären setUpWindowAnimations(); vor setContentView.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setUpWindowAnimations(); 
     setContentView(R.layout.activity_architecture); 

    } 

private void setUpWindowAnimations() { 
     if (android.os.Build.VERSION.SDK_INT >= 21) { 
      Log.i("ANIM", "Fade called"); 
      Fade fade = new Fade(2); 
      fade.setDuration(3000); 
      getWindow().setExitTransition(fade); 
     } 
    } 

andere Lösung

eine xmlTransition machen und diese XML-Code setzen dort

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="1000" 
    android:interpolator="@android:interpolator/accelerate_decelerate"> 
    <fade android:fadingMode="fade_out"/> 
    <slide android:slideEdge="bottom"/> 
</transitionSet> 

Diese Ihr Stil sein sollte für Api21

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
     <item name="android:windowContentTransitions">true</item> 
     <item name="android:windowTransitionBackgroundFadeDuration">1000</item> 
    </style> 
</resources> 

Dann diesen Code setzen in deine Tätigkeit voro re setCreateView

if (Build.VERSION.SDK_INT >= 21) { 

      TransitionInflater inflater = TransitionInflater.from(this); 
      Transition transition = inflater.inflateTransition(R.transition.transition_a); 
      getWindow().setExitTransition(transition); 
     } 

sollte , nachdem Sie Setup Ihre Absicht zwischen zwei Aktivitäten vor setCreateView

if(Build.VERSION.SDK_INT >= 21){ 
      Slide slide = new Slide(); 
      slide.setDuration(1000); 
      getWindow().setEnterTransition(slide); 
     } 
+0

Dies funktioniert nicht. Keine Änderung aufgetreten. –

+0

aktualisierte Antwort. Lass es mich wissen, wenn es funktioniert –

+1

es funktioniert auch nicht. Ich habe die Schieberichtung nach links geändert und gleitet immer noch von unten. –

30
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle(); 
this.startActivity(intent,bundle); 

Fügen Sie diese beiden Zeilen in der anderen Aktivität sein, das wird funktionieren.

Sie können nicht einfach eine Aktivität über startActivity(intent) Methode starten Sie müssen Übergänge über Aktivitäten mit Bundles angeben.

+0

Dies sollte die akzeptierte Antwort sein! –