Dans mon application, j'utilise une feuille inférieure (à partir de la bibliothèque de prise en charge) qui fonctionne très bien. Maintenant, j'aimerais animer un changement de présentation alors que la feuille est déplacée vers le haut. Pour cela, j'ai créé une sous-classe de BottomSheetCallback
(ce qui est normalement un à l'intérieur de la classe d'un Fragment donc pas tous les objets utilisés dans ce calss sont initialisés ici):
public class MyBehavior extends BottomSheetBehavior.BottomSheetCallback {
Transition transition;
float lastOffset = 0;
Scene scene;
public PlayerBehavior() {
TransitionInflater inflater = TransitionInflater.from(getContext());
transition = inflater.inflateTransition(R.transition.player);
//transition.setDuration(300);
scene = fullLayout;
transition.setInterpolator(new Interpolator() {
@Override
public float getInterpolation(float v) {
return lastOffset;
}
});
}
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState == BottomSheetBehavior.STATE_DRAGGING) {
TransitionManager.go(scene, transition);
}
}
@Override
public void onSlide(View bottomSheet, final float slideOffset) {
scene = (slideOffset > lastOffset) ? smallLayout : fullLayout;
lastOffset = slideOffset;
}
}
Comme vous pouvez le voir j'ai aussi créé deux Scene
à partir de différents fichiers de mise en page et une coutume Transition
pour animer entre les scènes avec l' TransitionManager
. Mon problème est que l' Transition
devrait être fondée sur l' slideOffset
paramètre (dans la gamme de 0 à 1), mais l' TransitionManager
utilise l' Animation
de la classe dans le fond, qui est normalement basée sur le temps de en Android.
J'ai essayé de créer le custom Intapolator mais cela ne fonctionne pas correctement. Alors, comment puis-je créer un Transition
qui est basé sur une variable externe et non pas sur le temps?