底部的动画版面更改

Cil*_*nco 27 android android-animation android-transitions

在我的应用程序中,我使用底部工作表(来自支持库),它非常有用.现在,我想在拖动工作表时设置布局更改动画.为此,我创建了一个子类BottomSheetCallback(这通常是片段的内部类,所以不是这个calss中使用的所有对象都在这里初始化):

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我还创建了两个Scene来自不同布局文件和一个自定义Transition动画之间的动画TransitionManager.我的问题是Transition应该基于slideOffset参数(在0-1的范围内),但是TransitionManager使用Animation背景中的类,这通常是基于Android的时间.

我试图创建自定义Intapolator但这不能正常工作.那么我怎么能创建一个Transition基于外部变量而不是按时的?

小智 0

我不确定这是否是您想要的,但也许您可以使用该函数而不是使用过渡,animate()因为使用此函数,您可以更改有关动画的所有内容(时间、可见性等)。