在底部表格滚动上的动画视图翻译

时间:2017-06-09 01:54:19

标签: android android-animation android-view bottom-sheet

我希望根据用户滚动底页来平滑地动画一些Y位置。

http://imgur.com/dVBlh83

然而动画有点不稳定 这可能是因为滚动底版会在某个时间间隔给我一个slideOffset,这对于我目前正在进行的setTranlationY而言并不常见。

有没有更好的方法来做到这一点。

底部工作表回调

BottomSheetBehavior.BottomSheetCallback() {

        @Override public void onSlide(@NonNull View bottomSheetView, float slideOffset) {
            int offset = (int) (slideOffset * 100);
            if (offset > 0) {
                scrollingHeaderView.animate(offset);
            }
        }
    });

scrollingHeaderView

public void animate(int offset) {
    position = -(offset / 2);
    arrow.setTranslationY(offset * ANIMATION_RATIO_ARROW);
    detailView.setTranslationY(offset * ANIMATION_RATIO);
}

我尝试过使用ObjectAnimator在每一步创建大量的小动画。

ObjectAnimator.ofFloat(arrow, "translationY", arrow.getTranslationY(), position * ANIMATION_RATIO_ARROW).start();

1 个答案:

答案 0 :(得分:0)

万一它可以帮助其他人。我看起来好多了。

首先我按比例设定比率*我得到的值范围。所以偏移将是0 - > 100. dp多了我希望视图移动

private static int ANIMATION_RANGE = 100;
arrowScale = -(getResources().getDimensionPixelOffset(R.dimen.arrow_distance) / ANIMATION_RANGE);
containerScale = -(getResources().getDimensionPixelOffset(R.dimen.detail_distance) / ANIMATION_RANGE);

然后当值改变时,我使用translationY

设置它
arrow.setTranslationY(position * arrowScale);
detailView.setTranslationY(position * containerScale);

我还需要一个重置方法,动画回原始位置

public void reset() {
    arrow.animate().setDuration(100).translationY(0);
    detailView.animate().setDuration(100).translationY(0);
}