In meiner Anwendung verwende ich ein unteres Blatt (aus der Support-Bibliothek), die gut funktioniert. Jetzt möchte ich eine Layoutänderung animieren, während das Blatt hochgezogen wird. Dazu habe ich eine Unterklasse von BottomSheetCallback
erstellt (dies ist normalerweise eine innere Klasse von einem Fragmente so dass nicht alle Objekte in dieser calss verwendet werden, hier initialisiert):Animate Layout Änderung des unteren Blattes
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;
}
}
Wie Sie sehen, ich Scene
aus verschiedenen auch zwei erstellt Layout-Dateien und eine benutzerdefinierte Transition
zu animieren zwischen den Szenen mit der TransitionManager
. Mein Problem ist, dass die Transition
sollte auf dem slideOffset
Parameter (im Bereich von 0-1) basieren, aber die TransitionManager
verwendet die Animation
Klasse im Hintergrund, die normalerweise in Android zeitbasiert ist.
Ich habe versucht, den benutzerdefinierten Intapolator zu erstellen, aber das funktioniert nicht ordnungsgemäß. Wie kann ich also eine Transition
erstellen, die auf einer externen Variablen basiert und nicht rechtzeitig?
Können Sie ein visuelles Beispiel bereitstellen. Screenshots zum Beispiel? –
Ich glaube nicht, dass es möglich ist. BottomSheet offset hat einen Wert von -1 bis 1 und springt nicht immer zwischen 0 und 1 oder -1 und 0. In einigen Fällen beginnt es bei 0.3 und geht bis zu 1.0f. Ich hatte in der Vergangenheit dasselbe Problem. Ich musste auf Ereignisse des Statuswechsels hören, die auf der Zeit basieren. –
Welchen Animationstyp benötigen Sie? – Khemraj