12

sto usando la barra d'azione nella mia applicazione Android, e sto usando animazione scorrevole durante la transizione l'attività, chiamando:Tenere Barra azioni stabile durante l'attività di animazione di transizione

startActivityForResult(i, ALL_OK); 
overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 

dove nei miei file xml ho il codice seguente:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="400"/> 
</set> 

e

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="400"/> 
</set> 

L'animazione viene eseguita con successo, b la diapositiva include anche la barra delle azioni.

C'è un modo in cui la barra delle azioni rimane stabile durante la transizione di attività?

+0

possibile duplicato di [Transizione tra attività senza spostare la barra di azione] (http://stackoverflow.com/questions/11904758/transitioning- between activities-without-moving-actionbar) –

risposta

13

C'è un modo in cui la barra delle azioni rimane stabile durante la transizione delle attività?

No, mi dispiace. Se passi da una attività all'altra, l'intera UI cambia, la barra delle azioni e tutto.

Se il comportamento dell'interfaccia utente desiderato è essenziale, riscrivere l'app per avere un'attività e più frammenti e utilizzare le animazioni per la transizione tra i frammenti.

+0

penso che dovrò essere d'accordo con te. .. il modo in cui funziona la gerarchia delle viste di android, rende ciò che voglio impossibile. ma potrei usare frammenti o visualizzare la transizione, invece ... grazie per la tua risposta. – NickPro

+0

@CommonsWare è possibile animare la barra delle azioni mentre si modifica l'attività? come action bar wil be restano stabili .e menu r chaging .. – Asthme

+0

@Asthme: come dice la risposta, no. Usa i frammenti. – CommonsWare

4

Può essere fatto in Android Lollipop utilizzando Activity Transition Animations, utilizzando lo stesso layout per la barra delle azioni in tutte le attività e definire la barra delle azioni per essere un elemento condiviso nel modo seguente:

In primo luogo, assicurarsi di consentire transizioni di attività nel V21/styles.xml e utilizzare NoActionBar tema in modo da poter creare una barra di un'azione personalizzata:

<style name="AppTheme.NoActionBar"> 
    ... 
    <!-- enable window content transitions --> 
    <item name="android:windowActivityTransitions">true</item> 
    <!-- specify enter and exit transitions --> 
    <item name="android:windowEnterTransition">@android:transition/slide_right</item> 
    <item name="android:windowExitTransition">@android:transition/slide_left</item> 
    <!-- specify shared element transitions --> 
    <item name="android:windowSharedElementEnterTransition">@transition/app_bar_transform</item> 
    <item name="android:windowSharedElementExitTransition">@transition/app_bar_transform</item> 
</style> 

Poi definire l'app_bar_transform.xml essere changeBounds come questo:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet> 
    <changeBounds/> 
</transitionSet> 

Poiché il layout della barra delle applicazioni è lo stesso in tutte le attività, non si verificherà alcuna trasformazione.

nella vostra abitudine AppBarLayout impostare l'attributo android: transitionName:

<android.support.design.widget.AppBarLayout 
    ... 
    android:id="@+id/app_bar" 
    android:transitionName="appBar" 
    ... 
</android.support.design.widget.AppBarLayout> 

Usare questo layout per la barra delle azioni in tutte le vostre attività:

<include layout="@layout/app_bar"/> 

Poi, quando si desidera avviare il attività successiva definisce il layout della barra delle applicazioni come un elemento condiviso come questo:

final Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
ActivityOptions options = null; 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
    AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar); 
    options = ActivityOptions.makeSceneTransitionAnimation(WelcomeActivity.this, appBar, "appBar"); 
} 
ActivityCompat.startActivity(WelcomeActivity.this, intent, options != null ? options.toBundle() : null); 

Ciò manterrà la barra delle applicazioni in posizione durante la transizione tra le attività.

+1

utilizzando 'ActivityOptionsCompat' e' ActivityCompat.startActivity() 'è possibile evitare la condizione' if' e rendere il codice più pulito – gldraphael

+0

Grazie @gldraphael, ho modificato la risposta per utilizzare 'ActivityCompat.startActivity()'. Sfortunatamente, 'ActivityOptions.makeSceneTransitionAnimation()' richiede Lollipop quindi l'istruzione 'if' è ancora lì. –

+0

È possibile utilizzare ActivityOptionsCompat.makeSceneTransitionAnimation –