我的应用程序中使用了一个底部工具栏(来自支持库),它运行良好。现在我想要在拖动表格时动画更改布局。为此,我创建了 BottomSheetCallback
的子类(通常是 Fragment 的内部类,因此并非在此处初始化所有对象使用的类):
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;
}
}
正如您所看到的,我还从不同的布局文件中创建了两个Scene
和一个自定义的Transition
,并使用TransitionManager
在场景之间进行动画过渡。 我的问题是,Transition
应该基于 slideOffset
参数(范围为0-1),但是 TransitionManager
在后台使用的是 Animation
类,在 Android 中通常是基于时间的。
我尝试创建自定义的Intapolator,但这并没有有效地解决我的问题。 那么,我应该如何创建一个基于外部变量而不是时间的Transition
呢?