有一个折叠的底片,我希望这个底片在我想要的时候(当我更新一些数据时)产生一点碰撞效果
您认为最佳做法是什么?使用设置的bottomsheetpeeklayoutheight属性吗?
我正在使用
private BottomSheetBehavior bottomSheetBehavior;
带有
private NestedScrollView bottomSheetStoreResult;
是否有人在其代码中实现了此功能?
谢谢大家! :)
。。
好吧,我正在与处理程序一起执行此操作,我知道使用它们并不总是一个很好的解决方案,但是在这里它是一种轻型任务,持续1秒钟。
但是它正在工作,就像我一直在期待的一样这是最重要的!
如果您有更好的解决方案,我仍然想听听你们的意见:
首先,我在onCreate()中使用getViewTreeObserver()来获取我的bottomsheetlayout的外观高度。
bottomSheetPeekLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
bottomSheetPeekLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
peekHeight = bottomSheetPeekLayout.getHeight();
}
});
然后,在网络结果中,我只使用了setPeekHeight,因为有将动画设置为true选项可用:
final Handler h1 = new Handler();
h1.postDelayed(new Runnable() {
@Override
public void run() {
h1.removeCallbacksAndMessages(this);
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED){
bottomSheetBehavior.setPeekHeight(peekHeight*3, true);
final Handler h2 = new Handler();
h2.postDelayed(new Runnable() {
@Override
public void run() {
h2.removeCallbacksAndMessages(this);
bottomSheetBehavior.setPeekHeight(peekHeight, true);
}
}, 400);
}
}
}, 600);
。。
。。
由于我虽然使用自己的持续时间是一个非常糟糕的主意,但我决定使用animate()方法。与以前的答案相比,它的工作更流畅,更好。
如果您要使用它,请确保您的底页足够高以进行翻译,而在动画过程中在底端不留空白。
使用此:
bottomSheetStoreResult.animate()
.translationYBy(-250)
.setDuration(300)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
bottomSheetStoreResult.animate()
.translationY(0)
.setDuration(300);
}
});
您可以自定义延迟,它会更干净:)享受吧!