【问题标题】:Custom Layout Behavior自定义布局行为
【发布时间】:2017-06-09 12:21:15
【问题描述】:

我怎样才能在底部栏获得such behavior?它的工作原理类似于浮动操作按钮的滚动感知行为,但是当 recyclerview 滚动到底部时,它会向上拉该面板(就像 recyclerview 中的最后一个元素是该面板)。我不认为开发人员复制了这些视图。也许有可能以某种方式扩展行为?

这是滚动感知行为的代码:

class ScrollAwareBehavior : CoordinatorLayout.Behavior<View> {
    constructor() : super()
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)

    override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout?, child: View?, directTargetChild: View?, target: View?, nestedScrollAxes: Int): Boolean {
        return nestedScrollAxes==ViewCompat.SCROLL_AXIS_VERTICAL
    }

    override fun onNestedScroll(coordinatorLayout: CoordinatorLayout?, child: View?, target: View?, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed)
        if (dyConsumed > 0) {
            val layoutParams = (child?.layoutParams as? CoordinatorLayout.LayoutParams?)?:return
            val fab_bottomMargin = layoutParams.bottomMargin
            child?.animate()?.translationY(child.height.toFloat() + fab_bottomMargin)?.setInterpolator(AccelerateDecelerateInterpolator())?.start()
        } else if (dyConsumed < 0) {
            child?.animate()?.translationY(0f)?.setInterpolator(AccelerateDecelerateInterpolator())?.start()
        }
    }
}

【问题讨论】:

标签: android kotlin android-coordinatorlayout


【解决方案1】:

这样做的一种方法是监听RecyclerView 上的滚动事件并检查最后一个可见项目并检查它是否是最后一个。
为此,LinearLayoutManager 中有 findLastCompletelyVisibleItemPosition()Adapter 中有 getItemCount()

【讨论】:

  • 但是如何与recyclerview滚动一起滑出那个栏?
  • 也许您可以使用findLastVisibleItemPosition(),检查它是否是最后一个,取其top 值,并将其应用于您的“栏”。 (也许您必须在 recyclerview 的底部添加一个填充并将填充的高度添加到顶部)。你明白了吗?
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2015-04-05
  • 2017-10-15
  • 2016-06-28
  • 2015-08-11
相关资源
最近更新 更多