首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

带有MotionLayout的安卓折叠工具栏是一种在安卓应用中实现动态效果的工具。MotionLayout是Android Jetpack库中的一部分,它提供了一种简单而强大的方式来创建复杂的动画和过渡效果。

在使用MotionLayout实现折叠工具栏时,可以通过设置不同的约束条件和动画效果来实现工具栏的展开和折叠。当RecyclerView为空或不可滚动时,禁用运动可以通过以下步骤实现:

  1. 首先,在布局文件中定义MotionLayout,并设置工具栏和RecyclerView的约束条件。
代码语言:txt
复制
<androidx.constraintlayout.motion.widget.MotionLayout
    android:id="@+id/motionLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar" />

</androidx.constraintlayout.motion.widget.MotionLayout>
  1. 在代码中,通过MotionLayout的setTransitionListener方法监听动画过渡的状态,并在过渡到折叠状态时禁用运动。
代码语言:txt
复制
MotionLayout motionLayout = findViewById(R.id.motionLayout);
motionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
    @Override
    public void onTransitionStarted(MotionLayout motionLayout, int startId, int endId) {
        // 过渡开始时的回调
    }

    @Override
    public void onTransitionChange(MotionLayout motionLayout, int startId, int endId, float progress) {
        // 过渡过程中的回调
    }

    @Override
    public void onTransitionCompleted(MotionLayout motionLayout, int currentId) {
        if (currentId == R.id.collapsed_state) {
            // 当过渡到折叠状态时禁用运动
            motionLayout.disableTransition(R.id.transition);
        }
    }

    @Override
    public void onTransitionTrigger(MotionLayout motionLayout, int triggerId, boolean positive, float progress) {
        // 过渡触发时的回调
    }
});

通过以上步骤,当RecyclerView为空或不可滚动时,MotionLayout会自动过渡到折叠状态,并禁用运动。这样可以实现带有MotionLayout的安卓折叠工具栏的效果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-meta-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【翻译】MotionLayout实现折叠工具栏(Part 1)

本系列教程中,我会讲解如何使用 MotionLayout 来创建一个我们已经非常熟悉动画行为:一个折叠工具栏动画( a Collapsing Toolbar )。...MotionLayout上许多其他动画框架一个主要不同点在于:视图动画和属性动画运行时长是给定,比如指定动画时长,取消某个动画都是可行,但是不能做到用户控制一个正在进行中动画。...举个例子,一个折叠工具栏应该根据用户滚动进行展开和折叠,所以实际动画运行应该时刻跟随用户拖拽进行。这也是那些框架办不到地方。 废话不多说,让我们看下我们所要尝试模拟做到行为动作。...在展开和折叠状态下, RecyclerView 列表上边缘是处于不同位置,因为它被约束到了 ID toolbar_image ImageView 图片下边缘,而这个过渡动画实现正是由于控制着这个位置变量值...我们使用是一个标准 ImageView 控件,其位于 ConstraintSet 下 Constraint 元素中,其主要属性变成可以是 ConstraintLayout.LayoutParams

1.9K31

【翻译】MotionLayout实现折叠工具栏(Part 2)

本系列教程中,我会讲解如何使用 MotionLayout 来创建一个我们已经非常熟悉动画行为:一个折叠工具栏动画( a Collapsing Toolbar )。...现在我们看看 MotionLayout 实现,我们会发现图片渐变在整个过渡动画中是统一稳定。也就是说:随着工具栏折叠动画开始,图片便立刻发生渐变,一直持续到工具栏完全到达折叠状态: ?...因此我们得到是一个非常平滑过渡动画,从工具栏开始发生折叠一直到工具栏完全达到折合状态为止。这也很好解释了我们所看到MotionLayout 中对动画行为实现。...目前来说,发生情况是:图片透明度在过渡动画还没有达到 60% 之前是不会发生变化(也就是至少超过一半折叠状态下不发生变化),接下来会慢慢开始淡出,直到工具栏达到 90% 折叠完全透明。 ?...首先我们并不局限于目前仅使用两个关键帧限制,事实上我们可以创建更多精细动画。甚至使用关键帧我们都能够创建出自定义渐进曲线来(对于开发者来说也就是所谓插值)。

1.7K30
  • Android开发笔记(一百三十六)可折叠工具栏布局CollapsingToolbarLayout

    折叠工具栏布局CollapsingToolbarLayout 上一篇博文《Android开发笔记(一百三十五)应用栏布局AppBarLayout》阐述了如何把Toolbar往上滚动,那反过来,...折叠系数可通过属性app:layout_collapseParallaxMultiplier配置,该属性1.0折叠效果同pin模式即固定不动;该属性0.0折叠效果等同于none模式,即也跟着移动相同距离...下面是Toolbar采用parallax模式效果图,可以看到红色区域会随着滚上去再滚下来。因为折叠系数设置0.1,所以其效果近似于none模式。 ?...下面是标题栏在折叠显示渐变图片效果图: ?...具体滚动说明如下所示: 向上滚动:头部先往上收缩,一直滚到折叠最小高度。然后头部与主体先一起滚动,头部滚到位后,主体继续向上。 向下滚动:头部与主体先一起滚动,一直滚到头部折叠最小高度。

    3.2K30

    Jetpack 重磅更新!

    App Startup - 在应用启动初始化组件 App Startup 类库提供了一种简单高效方法在应用启动初始化组件,而不是每个需要初始化组件定义单独 ContentProvider 。...MotionLayout,构建流畅交互式动画 MotionLayout 继承了 ConstraintLayout 丰富特性,帮助 Android 开发者管理复杂运动和窗口组件动画。...通过 MotionLayout ,你可以在 ConstraintSets 之间构造过渡动画,并且可以轻易集成通用 View 动画,像 RecyclerView 和 ViewPager 。...CameraX 设备上相机有很大差异,CameraX 兼容了 90% 设备。自从去年 2月份 CameraX 进入 Beta 以来,我们专注于可靠性以确保 API 在大量设备上具有良好表现。...这个 API 启动,如果网站支持深色主题,WebView 会进行渲染。如果不支持,API 将会强制修改相应颜色。

    1.2K70

    Constraint Layout 2.0 用法详解

    Flow Flow 是一种新虚拟布局,它专门用来构建链式排版效果,出现空间不足情况,它能够自动换行,甚至是自动延展到屏幕另一区域。...您可以对 wrapMode 指定三种模式: none – 所有引用视图以一条链方式进行布局,如果内容溢出则溢出内容不可见; chain – 出现溢出,溢出内容会自动换行,以新一条链方式进行布局...您可以对视图移动、滚动、缩放、旋转、淡入淡出等一系列动画行为进行自定义,甚至可以定义各个动画本身自定义属性。它还可以处理手势操作所产生物理移动效果,以及控制动画速度。...这样一来,在协调多个视图动画,就可以做到对各个细节进行精细操控。...尤其是在以下两种情况下,MotionLayout 会比其它动画构建工具更胜一筹: 可追溯动画 - 由其它输入驱动动画,例如工具栏滚动时会出现折叠效果 状态转换 - 由状态更改驱动动画,例如用户进入某一界面后

    2.2K30

    MotionLayout 使用介绍 (第一章)

    MotionLayout  是ConstrainLayout 2.0库中被引入一个新类,帮助开发者关联手势和组件动画。接下来文章将介绍会如何在应用中添加和使用MotionLayout。...系统框架中已经提供下面几种方法在应用中使用动画: 动画矢量Drawable 属性动画框架 LayoutTransition动画 使用TransitionManager进行布局转换 CoordinatorLayout...MotionLayout工具 我们相信这种声明式规范将简化过渡动画,同时也有助于 Android Studio 提供更好图形化工具。(我们现在正在积极开发这样工具,它现在还不可用。)...[strip] 最后,作为ConstrainLayout 2.0一部分,它最低支持API 14,99.8%设备都可以使用。...何时使用MotionLayout 我们设想到使用MotionLayout使用场景:当你需要移动,缩放或者动画实际UI组件(按钮,标题栏等)来提供与用户互动

    4.2K00

    CoordinatorLayout使用全解析

    exitUntilCollapsed:当你定义了一个minHeight,此布局将在滚动到达这个最小高度时候折叠。 snap:一个滚动事件结束,如果视图是部分可见,那么它将被滚动到收缩或展开。...CollapsingToolbarLayout可以通过app:contentScrim设置折叠工具栏布局颜色,通过app:statusBarScrim设置折叠状态栏颜色。...pin:CollapsingToolbarLayout折叠后,此布局将固定在顶部。 parallax:CollapsingToolbarLayout折叠,此布局也会有视差折叠效果。...CollapsingToolbarLayout子布局设置了parallax模式,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值:0~...RecyclerView任意滚动事件都将触发AppBarLayout或者AppBarLayout里面view改变。

    2K20

    折叠设备桌面模式

    展开您视频播放体验 可折叠设备向用户们提供了使用他们手机做更多事情可能性,包括*桌面模式**等创新,也就是手机平放,铰链处于水平位置,同时折叠屏幕处于部分打开状态。...这是一个简单媒体播放器案例,它会自动调节尺寸以避免让折叠处出现在画面中间,并且调整播放控制组件位置,从屏幕完全展开嵌入画面中,变为屏幕部分折叠显示单独面板。...这样一来该控件会在屏幕完全展开被隐藏,而屏幕部分折叠又出现在底部。 请注意第 28 行 layout_constraintGuide_end 属性。它就是您移动参考线需要改变值。...设备完全展开,整个屏幕都会被用于显示主 PlayerView。 最后问题: 设备折叠,您应该将 ReactiveGuide 移动到哪里?...更多资源 Exoplayer Codelab: 用 Exoplayer 播放视频流 桌面模式实例应用 折叠设备而设计 折叠设备构建应用 Jetpack WindowManager 使用 MotionLayout

    2.4K30

    react-native布局与组件

    SafeAreaView 会自动根据系统各种导航栏、工具栏等预留出空间来渲染内部内容。更重要 是,它还会考虑到设备屏幕局限,比如屏幕四周圆⻆角或是顶部中间不可显示“非安全”区域。... Button:按钮 一个简单跨平台按钮组件。可以进行一些简单定制。如图,前者,后者ios。...ActivityIndicator loading小菊花 显示一个loading提示符设备一个谷歌式半圆环,在ios设备上则显示一朵小菊花。...ListView底层实现,渲染组件Item是全量渲染,而且没有复用机制,渲染较⼤数据量,会不可避免地卡顿。...这个渲染窗⼝能响应滚动行为,元素离可视区越远优先级越低,越近优先级越高,当用户滑动速度过快,会出现短暂情况。

    5.2K20

    RecyclerView 必知必会

    但是RecyclerView出现会让很多开源项目被废弃,例如横向滚动ListView, 横向滚动GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...这个问题描述是:Item视图中有图片和文字,更新文字并调用notifyItemChanged(),文字改变同时图片会闪一下。...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据View视图。RecyclerView虽然没提供直接API,但是也可以很简单地实现。...通过AdapterDataObserver监听RecyclerView数据变化,如果adapter,那么隐藏RecyclerView,显示EmptyView。 具体实现如下: ?...实现中需要注意点有: 我们ToolBarapp:layout_collapseMode设置pin,表示折叠之后固定在顶端,而为ImageViewapp:layout_collapseMode设置

    4.2K90

    RecyclerView 必知必会

    但是RecyclerView出现会让很多开源项目被废弃,例如横向滚动ListView, 横向滚动GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...这个问题描述是:Item视图中有图片和文字,更新文字并调用notifyItemChanged(),文字改变同时图片会闪一下。...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据View视图。RecyclerView虽然没提供直接API,但是也可以很简单地实现。...通过AdapterDataObserver监听RecyclerView数据变化,如果adapter,那么隐藏RecyclerView,显示EmptyView。 具体实现如下: ?...实现中需要注意点有: 我们ToolBarapp:layout_collapseMode设置pin,表示折叠之后固定在顶端,而为ImageViewapp:layout_collapseMode设置

    2.5K70

    天气预报app(四)——搜索城市、完善页面

    ✅简易天气app(一)——解析Json数据、数据类封装 ✅简易天气app(二)——适配器、每小时数据展示 ✅简易天气app(三)——城市管理、数据库操作 简易天气app(四)—...第二层就是一个搜索框,使用到是AutoCompleteTextView,带有提示信息输入框,EditView也可以,右边搜索图标设置点击监听事件。...后续会更新,适配器也是提供ArrayAdapter,传入是全国所有市String[]数组。..._1提供样式,就是简单白框, 然后传入城市数组; 在此之前,这个城市数组还得定义好,前面Json数据解析我们已经知道,从City.txt文件已经拿到了全部城市,并成功传值给mCityBeanList...api查询城市传入城市名称不能带市,只能北京,天津,上海,不可北京市,上海市。

    1.7K50

    挥别web移动端开发差异和经典坑

    滚动容器上增加滚动 touch 方法 .wrapper { -webkit-overflow-scrolling: touch; } 设置overflow : 设置外部 overflow hidden.... auto: 使用普通滚动, 手指从触摸屏上移开,滚动会立即停止。...touch: 使用具有回弹效果滚动, 手指从触摸屏上移开,内容会继续保持一段时间滚动效果。继续滚动速度和持续时间和滚动手势强烈程度成正比。同时也会创建一个新堆栈上下文。...时间:201908 部分机器点击键盘发送相同内容 描述:部分机,如oppo 快速点击键盘发送,会发出2条一样内容,防抖与节流均不生效; 时间:201907 微信公众号 在微信授权回调带#...URL跳转会出现空白 描述:手机,在微信授权回调函数中进行跳转至URL不能带有#,但#号可放置在结尾。

    2.9K20

    Android开发笔记(一百三十七)自定义行为Behavior

    一般我们使用CoordinatorLayout,都是结合悬浮按钮FloatingActionButton、应用栏布局AppBarLayout或者可折叠工具栏布局CollapsingToolbarLayout...先上个图,说明一下自定义行为所支持画面: ? 从这张女孩照镜子动画可以看到,拖动左边女孩头像,右边镜子里头像也随之靠近或者远离,颇似现实生活中镜像运动。...:layout_behavior="@string/appbar_scrolling_view_behavior",表示通知AppBarLayout捕捉RecyclerView滚动操作。...首先在layoutDependsOn方法中判断依赖视图是否SnackbarLayout示例,表示悬浮按钮会跟着提示条一块运动。...比如AppBarLayout节点layout_behavior属性,便定义了AppBarLayout跟随主页面视图如RecyclerView运动行为。

    1.2K20

    折叠屏上应用设计规范,了解一下?

    这一做法在小屏上或许行得通,屏幕尺寸较大就会出现明显问题。网格系统则将您布局划分为一系列栏,从而帮助您在规范网格中设计更具表现力布局。...针对每个页面,您可以思考一下,屏幕尺寸变大,可以添加什么内容。屏幕尺寸变小时,可以删除哪些内容。然后再选择合适策略。...这可能意味着您需要重新审视导航图,尤其是您目前设计以手机为主更应如此。 如需构建响应式界面,我们应该优先考虑界面中长驻元素位置,例如导航元素。...△ 铰链区域 设备从折叠模式转换到非折叠模式,有两种主要技术方案可用于设计布局。第一种是扩大屏幕,该方案采用了一种简单响应式布局,在该布局下应用会扩展内容并填充到屏幕上。...FoldingFeature 中还包含窗口中折叠位置,折叠导致内容视图被割裂,我们应该及时更新布局参数。

    4.4K20
    领券