2017-04-11 2 views
4

Voici le scénario:activité de Android entrent transitions fonctionnent pas comme prévu sur les vues qui se chevauchent

Je suis en train de déclarer l'animation de transition entre deux activités - maître et détail. Maître est une liste RecyclerView avec des images, le détail est LinearLayout avec l'en-tête de la liste des parents. Les transitions sont déclarées en XML et liés à l'activité de détail comme ceci:

<item name="android:windowSharedElementEnterTransition">@transition/activity_enter_shared</item> 
<item name="android:windowEnterTransition">@transition/activity_enter</item> 

en transition de l'adaptateur de RecyclerView est déclenché comme ceci:

final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
    mContext, 
    imgView, 
    ViewCompat.getTransitionName(imgView) 
); 
mContext.startActivity(new Intent(mContext, ChildActivity.class), options.toBundle()); 

Le problème est: Dans @transition/activity_enter J'application fade sur certains éléments de mise en page (par exemple, bouton de retour). Ces éléments sont placés dans FrameLayoutsur une image. Cela semble causer des problèmes avec fade vues, qui au lieu d'apparaître en douceur sur l'écran, "pop". Cela se produit uniquement lorsque les vues chevauchent - si elles sont placées dans LinearLayout, tout fonctionne comme prévu. transition partagée (@transition/activity_enter_shared) -

final ViewGroup frame = (ViewGroup) findViewById(R.id.frame); 
frame.setOnClickListener(new View.OnClickListener() { 
    boolean visible; 

    @Override 
    public void onClick(View v) { 
     TransitionManager.beginDelayedTransition(frame); 
     visible = !visible; 
     frame.findViewById(R.id.target_id).setVisibility(visible ? View.VISIBLE : View.GONE); 
    } 
}); 

Note 2: -:

fade est déclaré dans @transition/activity_enter comme si

<fade 
    android:startDelay="300" 
    android:duration="100" 
    android:interpolator="@android:interpolator/linear"> 
    <targets> 
     <target android:targetId="@id/target_id" /> 
    </targets> 
</fade> 

Note 1 Si déclenché par programme dans Activityfade fonctionne très bien est personnalisé, cependant, en utilisant par défaut on ne résout pas le problème.

Note 3 - Dans ses plus simples, mises en page ressemble à ceci:

<FrameLayout> 
    <ImageView /> 
    <ImageButton android:id="@+id/target_id" /> 
</FrameLayout/> 

cependant problème n'est pas spécifique à FrameLayout mais plutôt chevauchement des vues.

Note 4 - Par exemple, dans la mise en page suivante Lorem sautera dans, tandis que ipsum se fanent dans

enter image description here

Répondre

0

D'accord, j'ai trouvé une réponse, pour les personnes intéressées. .

je dû mettre

<item name="android:windowSharedElementsUseOverlay">false</item> 

dans ma définition de style.

De documentation:

Indique si oui ou non les éléments partagés doivent utiliser une superposition pendant transitions. La valeur par défaut est true.