【发布时间】:2018-01-21 07:53:38
【问题描述】:
在我的应用程序中,我使用了一个底部工作表(来自支持库),效果很好。现在我想在向上拖动工作表时为布局更改设置动画。为此,我创建了 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?
【问题讨论】:
-
你能提供一个直观的例子吗?比如截图?
-
我认为不可能。 BottomSheet 偏移的值从 -1 到 1,它并不总是在 0 和 1 或 -1 和 0 之间反弹。在某些情况下,它会从 0.3 开始并上升到 1.0f。我过去有同样的问题。我必须根据时间来监听状态变化事件。
-
您需要哪种类型的动画。
标签: android android-animation android-transitions