5

sto facendo il mio TabLayout animato utilizzando Android: animateLayoutChanges = "true" in AppBarLayout. Ma quando ho impostato TabLayout.setVisibility (View.GONE), il contenitore per il mio frammento sale a ActionBar all'istante per alcuni millisecondi. E poi ritorna alla fine di TabLayout e lo porta alla ActionBar. Ho spiegato questo a seguito di gif.View salta e lampeggia istantaneamente, anche se animateLayoutChanges = "true"

Following gif

I pulsanti Teoria e pratica sono dietro il TabLayout per qualche ragione, ma quando si nasconde TabLayout animazione inizia FrameContainer che detiene mio punto di vista si attacca al fondo del TabLayout.

Ho registrato un video che illustra questo comportamento. Il video player Dropbox salta alcuni fotogrammi e l'animazione sembra carina. Ecco perché, per notare il bug, è possibile caricare video sul computer e guardare 5 e 11 secondi in alta qualità. Video

mio LayoutXML:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

<SurfaceView 
    android:layout_width="0px" 
    android:layout_height="0px"/> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:animateLayoutChanges="true"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 


    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:visibility="gone" 
     app:tabGravity="fill" 
     app:tabIndicatorColor="@android:color/white" 
     app:tabMode="fixed"/> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <!-- 
     This FrameLayout holds my fragments. 
    --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/outer_background"> 

     <ProgressBar 
      android:id="@+id/main_load_progress" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:indeterminate="true"/> 
    </FrameLayout> 

    <include 
     android:id="@+id/left_drawer_full" 
     layout="@layout/navigation_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"/> 

</android.support.v4.widget.DrawerLayout> 

</android.support.design.widget.CoordinatorLayout> 

Inoltre sto usando 23.2.1 librerie di supporto.

Come posso risolvere questo lampeggia e salta?

risposta

6

Prova ad aggiungere android:animateLayoutChanges="true" per la tua vista con

app:layout_behavior="@string/appbar_scrolling_view_behavior 

in modo che sarebbe la vostra DrawerLayout. Quindi attivare transizione Tipo LayoutTransition.CHANGING su di esso in questo modo:

ViewGroup layout = (ViewGroup) findViewById(R.id. drawer_layout); 
LayoutTransition layoutTransition = layout.getLayoutTransition(); 
layoutTransition.enableTransitionType(LayoutTransition.CHANGING); 

correlato: https://stackoverflow.com/a/22573099/1363742

0

Ho sprecato tutto il giorno per indagare su questo problema. E ho trovato una soluzione possibile per questo problema. Ora ho modificare la visibilità da questo codice

mTabLayout.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      switch (newMode) { 
       case MODE_CONTENTS: 
        mTabLayout.setVisibility(mContents.isTheoryAvailable() ? View.VISIBLE : View.GONE); 
        break; 
       default: 
        findViewById(R.id.content_frame).setVisibility(View.INVISIBLE); 
        mTabLayout.setVisibility(View.GONE); 
        findViewById(R.id.content_frame).setVisibility(View.VISIBLE); 
      } 
     } 
    }, 200); 

Funziona bene e parere non lampeggiano ora. Ma sui vecchi androidi il bug è ancora presente.