Las transiciones de entrada de actividad de Android no funcionarán según lo previsto en vistas superpuestas
Aquí está el escenario:
Estoy tratando de declarar la animación de transición entre dos actividades – maestro y el detalle. Master es una lista de RecyclerView
con imágenes, el detalle es LinearLayout
con la imagen del encabezado de la lista de los padres. Las transiciones se declaran en XML y se enlazan a la actividad de detalle de la siguiente manera:
- Androide: Elevación no respetada a través de FragmentTransactions
- Diseño de material de Android
- Cómo configurar una pestaña específica al abrir una actividad de Layout de pestaña deslizante?
- Hoja inferior no aparece a veces en vista complicada
- Diseño como la aplicación HotStar
<item name="android:windowSharedElementEnterTransition">@transition/activity_enter_shared</item> <item name="android:windowEnterTransition">@transition/activity_enter</item>
En la transición del adaptador de RecyclerView
se activa de la siguiente manera:
final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation( mContext, imgView, ViewCompat.getTransitionName(imgView) ); mContext.startActivity(new Intent(mContext, ChildActivity.class), options.toBundle());
El problema es: En @transition/activity_enter
estoy aplicando fade
en algunos elementos de diseño (por ejemplo, botón de retroceso). Estos elementos se colocan en FrameLayout
sobre una imagen . Esto parece causar problemas con las vistas de fade
, que en lugar de aparecer suavemente en la pantalla, "pop in". Esto sólo ocurre cuando las vistas se superponen – si se coloca en LinearLayout
everythings funciona como se pretende.
fade
se declara en @transition/activity_enter
manera:
<fade android:startDelay="300" android:duration="100" android:interpolator="@android:interpolator/linear"> <targets> <target android:targetId="@id/target_id" /> </targets> </fade>
Nota 1 – Si se activa de forma programática en Activity
fade
funciona bien:
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); } });
Nota 2 – La transición compartida ( @transition/activity_enter_shared
) es personalizada, sin embargo, usar el predeterminado no resuelve el problema.
Nota 3 – En su forma más simple, los diseños tienen este aspecto:
<FrameLayout> <ImageView /> <ImageButton android:id="@+id/target_id" /> </FrameLayout/>
Sin embargo, el problema no es específico de FrameLayout
sino más bien superposición de vistas.
Nota 4 – Por ejemplo, en la siguiente disposición Lorem aparecerá, mientras ipsum se atenuará.
- Nuevo tema.AppCompat ActionBar altura
- Material Tema Android Action Bar Estilo Generador
- Diseño de material Android replicar barra de herramientas ejemplo de migas de pan
- Para bibliotecas de soporte de materiales de Android, ¿dónde puedo encontrar CardView y RecyclerView?
- ¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
- AppCompat ShareActionProvider icono es demasiado grande en comparación con otros iconos
- Android RecyclerView con CardView - mostrar tarjetas en una pila-como (no una lista)
- ¿Cómo puedo conseguir el selector de marcación rápida android fab?
Muy bien, encontré una respuesta, para los interesados.
Tuve que poner
<item name="android:windowSharedElementsUseOverlay">false</item>
En mi definición de estilo.
De la documentación :
Indica si los elementos compartidos deben o no utilizar una superposición durante las transiciones. El valor por defecto es verdadero.
- Mostrar imagen diferente de Android en diferentes resoluciones
- No se puede encontrar la dependencia com.google.android.gms: play-services-ads-lite: