J'essaie de faire une transition d'activité en utilisant des éléments partagés sur un appareil pré-Lollipop (4.x). C'est possible? Jusqu'à présent, j'essaie ceci:
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());
}
}
appelé par:
@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);
}
Mais il en résulte une transition "régulière" (pas d'élément partagé). Des idées?
[~ # ~] modifier [~ # ~]
Selon cette vidéo, cela pourrait être fait:
https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL
Existe-t-il déjà une bibliothèque implémentant ceci pour la pré Lollipop?
Non, les transitions activité/fragment ne sont pas possibles sur les appareils pré-Lollipop. Selon la documentation :
Si possible, démarrez une activité avec des informations de lancement supplémentaires.
Dans Android 4.1+ options supplémentaires ont été introduites pour permettre plus de contrôle sur les animations de lancement d'activité. Les applications peuvent utiliser cette méthode avec ActivityOptionsCompat pour utiliser ces animations lorsqu'elles sont disponibles. Lorsqu'elles sont exécutées sur des versions de la plateforme où cette fonctionnalité n'existe pas, l'activité sera lancée normalement.
Voir aussi la réponse de George Mount à cette question StackOverflow .
Vous pouvez consulter cette bibliothèque pour les transitions d'activité et de fragment pour les appareils pré Lollipop
dependencies {
compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}
Bien que les transitions fantaisie d'activité/fragment de Lollipop ne soient pas disponibles avant Lollipop (sans l'utilisation d'une bibliothèque tierce), vous pouvez toujours remplacer l'animation utilisée pour la transition entre les activités.
Juste avant/après avoir commencé à appeler startActivity (), vous pouvez appeler [Activity.overridePendingTransition] ( http://developer.Android.com/reference/Android/app/Activity.html#overridePendingTransition (int , int)). Lorsque vous quittez votre activité, appelez la même méthode.
De même, vous pouvez utiliser ActivityOptionsCompat pour définir une animation personnalisée à utiliser pendant une transition.
ActivityOptionsCompat opts =
ActivityOptionsCompat.makeCustomAnimation(getActivity(), R.anim.in, R.anim.out);
startActivity(intent, opts.toBundle());
Il existe une bibliothèque de support, mais elle ne prend pas en charge (toutes) les transitions sur les versions Android inférieures à 5.0). Il existe cependant quelques alternatives:
Bibliothèques de compatibilité non officielles
https://github.com/andkulikov/transitions-everywhere
https://github.com/takahirom/PreLollipopTransition
https://github.com/lgvalle/Material-AnimationsKitKat Android
http://www.doubleencore.com/2013/11/new-transitions-framework/ et un exemple trouvé dans votre dossier d'exemples SDK.
Publié plus tôt pour un double de cette question ici: https://stackoverflow.com/a/27344471/1683141