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


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?


32
2017-10-25 21:23


origen


Respuestas:


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

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 StackOverflow.


18
2017-10-26 00:25



Puede consultar esta biblioteca para ver las transiciones de actividad y fragmentos de los dispositivos previos a la piruleta

dependencies {
        compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}

https://github.com/albinmathew/PreLollipopTransition


8
2018-05-28 09:36



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 hacer una llamada a [Activity.overridePendingTransition] (http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, En t)). 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());

2
2017-11-17 23:22



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   muestra que se encuentra en su carpeta de muestras de SDK.

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


2
2018-01-29 11:52