Anular invertir SharedElementTransition cuando onBackPressed

Tengo 4 ImageButton s colocados en un Layout simple. Cuando hago clic en cualquiera de estos botones, se TabActivity una nueva TabActivity y se selecciona la correspondiente Tab (0-3). Las pestañas están diseñadas con un ImageView coincide con uno de los botones anteriores cada uno.

EDITAR CON ALGUNOS PROGRESOS ABAJO

TL: DR: Cómo establecer una SharedElementTransition diferente al regresar a la actividad de llamada, para que la transición "back" no sea una inversión de la original, y posiblemente animar diferentes View s?

También utilizo una SharedElementTransition para animar el ImageButton en la pestaña seleccionada, que funciona al entrar en la nueva Activity , pero si navego a través del Fragment de la nueva Activity , y presiono el botón back de un Fragment diferente al que llegué , la SharedElementTransition inversa no coincide con la Tab que estoy actualmente, y solo invierte la transición utilizada para iniciar la nueva actividad.

Puedo ver que este es el comportamiento esperado, pero ¿cómo puedo anularlo? Quiero que la transición inversa comience desde la Tab actual, no desde la Tab que llegué desde la Activity anterior.

Espero que esta imagen ignominiosa ayude a entender la pregunta (muestra el comportamiento que quiero obtener: iniciar una nueva actividad desde el botón naranja, navegar hasta el fragmento de la pestaña verde y presionar regresar a la primera actividad pasando de la pestaña verde): Problema de transición hacia atrás

No hay mucho código implicado en la pregunta, pero apenas en caso de que esté lanzando la nueva Activity como:

 (...) ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(fromActivity, sharedView, transitionName); fromActivity.startActivityForResult(toIntent, requestCode, options.toBundle()); 

Y luego, en la Activity llego, configuro el TabLayout siguiente manera en el método onCreate() (un código analógico para cada Tab :

 tab0 = (...); ImageView v0 = (ImageView) tab0.findViewById(R.id.tab_img); ApiLevelHelper.setImageDrawable(this, v0, R.drawable.menu_btn_0); tabLayout.getTabAt(0).setCustomView(tab0); 

Gracias por adelantado

EDITAR: ALGUN PROGRESO LOGRADO

Bueno, Todavía hay un problema importante que resolver, pero he logrado obtener la Tab derecha de la transición en la animación inversa. Para lograr esto, no tengo ningún nombre de transición previamente adjunto a la Tab de ImageView s, y establezco el nombre de transición en el método onCreate() de la nueva actividad sólo a la Tab seleccionada. A continuación, dentro de la llamada onBackPressed() , onBackPressed() todos los nombres de transición de todas las Tab ' ImageView s, y establecerlo en la Tab actual. De esta manera, la animación inversa comienza desde la Tab correcta, pero termina en la posición original de ImageView , en lugar de la nueva.

Lo que he probado hasta ahora:

  1. Borrar los nombres de transición en la primera actividad y configurarla sólo en el ImageView al que desee realizar la transición inversa, dentro del onActivityResult(...) . Lamentablemente, las condiciones de animación parecen establecerse antes de llamar a este método.
  2. Establecer referencias a la actividad de los padres (sabiendo que esto es malo, sólo prueba) y borrar los nombres de transición y establecer el que quiero antes de llamar a super.onBackPressed() de la segunda Activity . No cambió nada.

Algún código que muestra cómo se establece el nombre de transición de la Tab actual:

 //Second Activity @Override public void onBackPressed() { if (ApiLevelHelper.isAtLeast(Build.VERSION_CODES.LOLLIPOP)) { for (ImageView v : tabImages) { v.setTransitionName(null); } int selectedTab = mTabLayout.getSelectedTabPosition(); tabImages[selectedTab].setTransitionName(getString(R.string.transition_menu_tab)); Intent output = new Intent(); output.putExtra("selected_tab", selectedTab); setResult(RESULT_OK, output); } super.onBackPressed(); } 

Y luego, en la primera Activity …:

 //First Activity //This code has no effect right now on the ending position of the transitioned view. public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQ_WHICH_TAB && data != null) { if (ApiLevelHelper.isAtLeast(Build.VERSION_CODES.LOLLIPOP)) { int selectedTab = data.getIntExtra("selected_tab", 0); setTransitionName(selectedTab); //This call nullifies all transition names //and sets it back to the right ImageView. //But it doesn't work. } } super.onActivityResult(requestCode, resultCode, data); } 

Creo que de alguna manera necesito manipular la transformada previamente calculada … todavía investigando.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.