transiciones studio animations activities java android material-design activity-transition shared-element-transition

java - studio - ¿Las transiciones de actividad/fragmento son compatibles con los dispositivos anteriores a Lollipop?



transiciones en android studio (4)

Aunque las elegantes transiciones de Lollipop Activity / Fragment no están disponibles antes de Lollipop (sin el uso de una biblioteca de terceros), aún puede anular la animación utilizada para la transición entre actividades.

Justo antes / después de que comience a invocar startActivity () puede realizar una llamada a [Activity.overridePendingTransition] ( http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int , int)). Cuando salga de su actividad, llame al mismo método.

De manera similar, puede usar ActivityOptionsCompat para definir una animación personalizada para usar durante una transición.

ActivityOptionsCompat opts = ActivityOptionsCompat.makeCustomAnimation(getActivity(), R.anim.in, R.anim.out); startActivity(intent, opts.toBundle());

Estoy tratando de hacer una transición de actividad utilizando elementos compartidos en un dispositivo pre-Lollipop (4.x). ¿Es posible? Hasta ahora, estoy intentando esto:

public class RewardDetail extends ActionBarActivity { @Override public void onCreate(final Bundle savedInstanceState) { ... ViewCompat.setTransitionName(imageView, TRANSITION_NAME); } ... public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) { ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME); Intent intent = new Intent(activity, RewardDetail.class); intent.putExtra(PARAM_DATA, detailData); ActivityCompat.startActivity(activity, intent, options.toBundle()); } }

llamado por:

@Override public void onClick(final View v) { int position = recyclerView.getChildPosition(v); WelcomeReward welcomeReward = data.get(position); RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward); }

Pero da como resultado una transición "regular" (sin elemento compartido). ¿Algunas ideas?

EDITAR

De acuerdo con este video, podría hacerse:

https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL

¿Hay una biblioteca que ya esté implementando esto para pre Lollipop?


Hay una biblioteca de soporte, pero no admite (todas) las transiciones en las versiones de Android inferiores a 5.0. Sin embargo, hay algunas alternativas:

Bibliotecas de compatibilidad no oficial
https://github.com/andkulikov/transitions-everywhere
https://github.com/takahirom/PreLollipopTransition
https://github.com/lgvalle/Material-Animations

Android KitKat
http://www.doubleencore.com/2013/11/new-transitions-framework/ y un ejemplo que se encuentra en su carpeta de ejemplos de SDK.

Publicado anteriormente en un duplicado de esta pregunta aquí: https://.com/a/27344471/1683141


No, las Transiciones de Actividad / Fragmento no son posibles en los dispositivos anteriores a Lollipop. De acuerdo con la documentation :

Comience una actividad con información de inicio adicional, si puede.

En Android 4.1+ se introdujeron opciones adicionales para permitir un mayor control en las animaciones de lanzamiento de actividades. Las aplicaciones pueden usar este método junto con ActivityOptionsCompat para usar estas animaciones cuando estén disponibles. Cuando se ejecuta en versiones de la plataforma donde esta función no existe, la actividad se iniciará normalmente.

Ver también la respuesta de George Mount a esta pregunta de .