我希望根据用户滚动底页来平滑地动画一些Y位置。
然而动画有点不稳定 这可能是因为滚动底版会在某个时间间隔给我一个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();
答案 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);
}