带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动

Posted

技术标签:

【中文标题】带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动【英文标题】:Android collapsing toolbar with MotionLayout - disable motion when RecyclerView is empty/not scrollable 【发布时间】:2019-10-18 05:21:33 【问题描述】:

我正在尝试使用 MotionLayout 视图来获得折叠工具栏的行为。我的方法类似于这里的示例:https://blog.stylingandroid.com/motionlayout-collapsing-toolbar-part-1/

这可以正常工作,但即使 recyclerview 为空或条目数少于屏幕显示的条目数,也会在滑动时开始转换。

如果回收器实际上能够滚动,有没有办法只启用 MotionLayout 过渡?

我的 OnSwipe 描述:

<OnSwipe
    app:dragDirection="dragUp"
    app:maxAcceleration="40"
    app:moveWhenScrollAtTop="true"
    app:touchAnchorId="@id/recycler"
    app:touchAnchorSide="top" />

【问题讨论】:

这有什么更新吗?找到一种方法来禁用过渡?我试过 getTransition().setEnabled(false) 没有成功 我一直在尝试同样的事情一天,但没有运气。如果你做到了,请分享:) 【参考方案1】:
if (dataList.isEmpty()) 
 motionLayout.enableTransition(R.id.transition, false)

【讨论】:

【参考方案2】:

填充回收站视图后调用下面的函数

     private fun enableOrDisableMotionLayout() 
                    Handler(Looper.getMainLooper()).postDelayed(
                        try 
                            if (binding.recyclerActivity != null) 
                                if (binding.recyclerActivity.canScrollVertically(-1) || binding.recyclerActivity.canScrollVertically(
                                        1
                                    )
                                ) 
                                    //R.id.transition should be the id used in Transition Tag in MotionScene xml file
                                    binding.motionLayout.enableTransition(R.id.transition, true)
                                 else 
                                    
                                    binding.motionLayout.enableTransition(R.id.transition, false)
                                
                            
                         catch (e: Exception) 
            
                        
                    , 50L)
                

以上代码将根据 recyclerview 中的内容禁用或启用 motionLayout 滚动。 注意:当最后一个项目部分可见时,仍然没有找到停止滚动 od motionlayout 的代码,这使得即使显示回收器视图的所有内容,motionlayout 也会滚动到折叠状态

【讨论】:

【参考方案3】:

像这样改变你的 OnSwipe:

<OnSwipe
      app:dragDirection="dragUp"
      app:touchAnchorId="@id/recycler"
      app:touchAnchorSide="top" />

【讨论】:

对不起,这不起作用。仍然是相同的行为。

以上是关于带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动的主要内容,如果未能解决你的问题,请参考以下文章

Android新控件MotionLayout介绍

带有底部工作表的 Motionlayout 无法按预期工作

Android新控件MotionLayout介绍

Android新控件之MotionLayout 动画管理布局简单介绍<一>

android MotionLayout从入门到实战..

android MotionLayout从入门到实战..