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 FrameLayout
sur 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 Activity
fade
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