Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Glitch al animar vistas anidadas en un elemento compartido Transición de actividad?

He estado jugando con las nuevas API en Android 5.0 y he estado tratando de averiguar si es posible o no animar tanto a ViewGroup como a uno de sus hijos por separado como elementos compartidos durante una transición de la actividad .

Las capturas de pantalla a continuación ofrecen un ejemplo simplificado de lo que estoy tratando de lograr:

Posiciones iniciales de la primera actividadPosiciones finales de la segunda actividad

En la primera actividad, el cuadro gris oscuro es un ViewGroup centrado en la pantalla y el cuadro rojo es su View secundaria (el código XML de presentación que estoy utilizando se puede encontrar aquí ). Cuando el usuario hace clic en el cuadro gris oscuro, el cuadro gris oscuro debe escalar gradualmente para llenar el fondo de la segunda actividad. Al mismo tiempo, la caja roja debe gradualmente escalar y reposicionarse en la esquina superior izquierda de la segunda actividad.

El código de actividad y animación

El código de Activity que estoy usando para realizar la transición es simple:

 /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Override protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setSharedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Override public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); startActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setSharedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } 

El problema

Cuando hago clic en el cuadro gris oscuro de la primera actividad, comienza la transición del elemento compartido y la caja gris oscura se escala muy bien para llenar el fondo de la segunda actividad. Sin embargo, el cuadro rojo no parece animar en absoluto. Tan pronto como comienza la transición, la caja roja cambia bruscamente de tamaño y se posiciona en su ubicación final dentro de la segunda actividad antes de que la caja gris haya terminado de animar.

Mi pregunta

¿Es posible animar tanto una ViewGroup como una / algunas / todas las vistas de sus hijos de forma independiente como elementos compartidos en una transición de la Activity ? Si es así, ¿qué estoy haciendo mal y qué puedo hacer para asegurar que las vistas de los niños también estén animadas?

Si tenías problemas para seguir mis descripciones, el código fuente completo para este proyecto de ejemplo está disponible en GitHub y un APK que se puede ejecutar está disponible para descargar aquí (necesitarás un dispositivo físico o un emulador con Android 5.0 para ejecutar el APK).

One Solution collect form web for “Glitch al animar vistas anidadas en un elemento compartido Transición de actividad?”

Sí, puede realizar la transición de un grupo y su contenido por separado. Pero usted acaba de encontrar un error que se fijará en L MR1.

Parece que esto no está bien apoyado en L. Yo recomiendo que hagas los elementos compartidos hermanos en la segunda Actividad:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/dark_gray" android:transitionName="outer_box"/> <RelativeLayout android:id="@+id/outer_box" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/inner_box" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginLeft="50dp" android:layout_marginTop="50dp" android:background="@color/red" android:transitionName="inner_box" /> </RelativeLayout> </FrameLayout> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.