问题标签 [android-motionlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1784 浏览

android - MotionLayout 滑动而不捕捉到状态?

我注意到到目前为止所有的 MotionLayouts 总是捕捉到它们的一个最终状态,即使你在动画的中途拖动一个视图,停止,然后放手。我想要实现的是让motionlayout 只对用户交互和动量起作用。如果用户在动画中间放开,它应该在动量用完后完全停止,并且不会继续插值直到明确定义的状态,这是默认行为。

列表、滚动视图、coordinatorlayouts 都支持这种“中途”停止,那么为什么不支持motionlayout呢?

那么有谁知道如何冻结状态之间运动布局的进度?它应该适用于时间线上的任何位置,所以我不想添加额外的状态,因为它需要 100 个状态。

0 投票
1 回答
2092 浏览

android - MotionLayout:如何为边距设置动画

我正在使用MotionLayout动画将视图的大小从全屏调整为具有特定边距的较小尺寸(如下所示)。它大部分工作正常,但显示的边距为 0,直到动画结束,然后立即应用它们。有什么办法也可以为这些设置动画吗?

我尝试使用KeyFrameSet创建具有不同边距值的中间点,但这没有效果。

例如

更新

所以,看起来问题与我正在使用的事实有关SurfaceView......如果我尝试使用ImageView例如边距确实会逐渐变化。

0 投票
2 回答
2599 浏览

android - 使用动作布局时我开始与 UI 交互后进度条可见性重置

约束布局版本:2.0.0-alpha3

所以我正在使用 MotionLayout 我想创建类似的东西。https://blog.stylingandroid.com/motionlayout-collapsing-toolbar-part-2/

我想实现当用户进入活动ProgressBar时,当我加载数据时(需要一些时间)我想ProgressBar隐藏。

我的问题是,当我开始与 UI 交互时,ProgressBar状态被重置并再次可见

我应该怎么做才能防止progressBar在用户开始与之交互后开始显示?

这是一个简化版本

layout file

这是布局说明 ( xml/collapsing_toolbar)

这是一个简单的活动,我在 1 秒后隐藏 ProgressBar

我在用androidx.constraintlayout:constraintlayout:2.0.0-alpha3

编辑:我也将此报告为错误https://issuetracker.google.com/issues/124812189

编辑:对此的部分解决方案是将 progress_bar 和错误可见性设置为 GONE << 但是,相同的场景适用于此处,因此如果您与加载交互,您可以看到scrollView,但是当应该有内容时,它比看到 ProgressBar 更好。

0 投票
1 回答
8064 浏览

android - 以编程方式更改 MotionLayout 运动场景中的 ConstraintSet 属性

我有一个用例,我想使用 MotionLayout 创建类似 Youtube 的动画。repo中有此动画的示例。但问题是,在这个例子中,他们使用静态高度来启动约束,如下所示320dp

但我要求使用纵横比设置约束。对于静态纵横比,我可以app:layout_constraintDimensionRatio="w,16:9"像这样在约束中设置使用。

但是每个视频都有不同的宽高比,我从 API 获得。所以我想根据视频设置不同的宽高比。我无法找到以编程方式设置它的方法ConstraintSet

我尝试了一种解决方法来以android:layout_height="wrap_content"编程方式设置和更改视图纵横比。但它不起作用,动画也不能正常工作。

任何解决方案或建议将不胜感激。

0 投票
0 回答
2141 浏览

android - 第一次向相反方向滑动时,MotionLayout OnSwipe 过渡故障

我正在使用 MotionLayout 来实现一个简单的动画:我的 MotionLayout 中有两个视图,一个限制在顶部的条形图和一个限制在条形图底部的 RecyclerView。当我滚动 RecyclerView 时,顶视图应该被推出。(就像一个折叠工具栏)我的 MotionScene 如下所示:

过滤器是顶视图,table_view是 RecyclerView。动画就像一个魅力,只有一个很大的小故障。当我第一次进入屏幕并开始向下拖动 RecyclerView,整个顶视图正在消失。如果我开始向上滚动,一切都会恢复正常,我无法再重现故障。我不知道是我做错了什么,还是 MotionLayout 有错误。

备注:我需要转换 Y用于特定目的。如果我将 OnSwipe 方向更改为dragDown,当我开始向上滚动时也会发生同样的事情。

0 投票
1 回答
852 浏览

android - MotionLayout - clicking on the layout behaves incorrectly

For a project I am using MotionLayout, all's working well and smoothly, except for one little thing. When I open the app and press somewhere on the screen, sometimes the layout jumps to an undefined state.

The states that I have defined are: - the app starts with a 'broken-white' background - when swiping right, a frame layout with a blue background will be shown - when swiping up, a frame layout with a red background will be shown, hiding all other imageViews

The state the app takes when pressing somewhere on the screen - A red background appears with all imageViews visible.

I have been looking for a reason as to why this happens, I guess it's a bug (seeing as it's still in alpha), but wanted to get another one's opinion.

The code will be attached to reproduce it fairly easily.

The main layout:

The motion layout:

0 投票
0 回答
530 浏览

android - 为 MotionLayout 实现“类似 YouTube 的动作示例”时出现问题

当我想从这里实现 YouTube 之类的动作示例时,我遇到了一些错误。这是我的 XML 代码。

活动主.xml:

片段主:

片段媒体播放器.xml:

场景_24.xml:

在 activity_main.xml 我使用两个 frameLayout 来显示两个不同的片段。其中一个用于fragment_main.xml,另一个用于fragment_media_holder.xml。我想在向上滑动时喜欢“YouTube like motion Example”,我会看到所有媒体播放器部分,而在滑动底部时只看到 img_cover 和 playPauseView 和 ProgressBar。请帮我在我的代码中找到错误?!谢谢你

0 投票
2 回答
887 浏览

android - 水平和垂直回收器视图中的滚动问题

我有一个带有 ViewPager 的 MotionLayout。在 ViewPager 托管的片段之一中,我有一个带有两个水平 RecyclerView 的垂直 RecyclerView。垂直滚动效果很好,但是,当我尝试在内部 RecyclerViews 上水平滚动时,它不能很好地工作。它似乎试图垂直滚动(这里的问题视频:https ://youtu.be/94rQ5Qkr2ew )我怀疑这与我正在使用的视图组合有关,但我不完全确定如何去做修复它或找出问题所在。我已经在内部(水平) RecyclerView 上尝试过这个,它似乎并没有太大的区别:

这是 MotionLayout 容器的布局文件:

它使用以下运动场景:

知道如何解决这个问题吗?或者至少改进一下?

0 投票
2 回答
2673 浏览

android - MotionLayout:多个累积过渡

我正在使用MotionLayout并尝试应用一系列转换(在MotionScene文件中定义)。例如,Transition1 改变 View1 的位置,然后 Transition2 随后改变 View2 的位置。我看到的问题是 Transition2 导致 View1 恢复到原来的布局。我正在使用调用来触发转换transitionToState()(我还尝试使用setTransition()然后调用显式提供转换的开始/结束状态transitionToEnd())。

我在https://www.raywenderlich.com/8883-motionlayout-tutorial-for-android-getting-started中看到了评论

如果您不为视图提供结束约束,它将消失。发生这种情况是因为库不知道它应该在动画结束时应用哪些约束

是否还需要在ConstraintSetTransition2 中包含有关 View1 布局的信息?

https://github.com/googlesamples/android-ConstraintLayoutExamples/blob/master/README.md中有一个“多状态”示例,但看起来包含的转换都从单个基本状态开始(而不是“累积”)

0 投票
1 回答
814 浏览

android - 带有 RecyclerView 点击事件的 MotionLayout 仅在第二次点击后有效

我正在按照本教程源代码使用 Motion Layout 来实现折叠工具栏。当您在 recyclerView 上执行“快速滚动”然后在 recyclerView 的任何项目上执行单击事件时,此事件仅在您第二次单击后才有效。或者您必须等待 2-3 秒,然后单击事件才起作用。否则无法将 click 事件分派到 recyclerView。(假设它等待在 MotionLayout 上完成动画)。我们如何解决这个问题?

任何人都可以通过将以下代码添加到文章源代码的适配器来模拟问题。并进行快速滚动。