BottomSheetBehaviour setstate没有动画

时间:2016-03-23 15:12:52

标签: android android-design-library android-coordinatorlayout bottom-sheet

我尝试使用设计库 23.0.2 的新volumes: - name: containers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log ,但我认为它太有限了。当我使用BottomSheetBehaviour方法更改状态时,底部图片会使用广告动画移至新状态。

如何在没有动画的情况下立即更改状态?我没有看到公开的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

不幸的是,看起来你不能。 for (int i = 2; i < 5; i++) { xlWorkSheet.Cells[3, i].Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = 1d; } BottomSheetBehavior的调用以setState的同步或异步调用结束。而且无法覆盖这些方法,因为startSettlingAnimation(child, state)是最终的,setState具有包可见修饰符。查看源以获取更多信息。

我遇到了同样的问题,但是以一种不同的方式 - 我的UI状态在结算动画调用之前将startSettlingAnimation更改为false,所以我在那里得到setHideable。我会考虑使用IllegalStateException来妥善管理。

答案 1 :(得分:1)

如果要删除显示/关闭动画,可以使用 dialog.window?.setWindowAnimations(-1)。例如:

class MyDialog(): BottomSheetDialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val dialog = super.onCreateDialog(savedInstanceState)

        dialog.window?.setDimAmount(0f) // for removing the dimm
        dialog.window?.setWindowAnimations(-1) // for removing the animation

        return dialog
    }
}

答案 2 :(得分:0)

如果您真的需要它,那么您可以求助于反思:

'user.id = :userId'

然后,当状态更改时,您可以使用以下扩展方法:

  fun BottomSheetBehavior.getViewDragHelper(): ViewDragHelper? = BottomSheetBehavior::class.java
    .getDeclaredField("viewDragHelper")
    .apply { isAccessible = true }
    .let { field -> field.get(this) as? ViewDragHelper? }

  fun ViewDragHelper.getScroller(): OverScroller? = ViewDragHelper::class.java
    .getDeclaredField("mScroller")
    .apply { isAccessible = true }
    .let { field -> field.get(this) as? OverScroller? }

我还要补充一点,代码不是完美的,每次状态改变时获取字段都是无效的,而这样做是为了简单起见。