Java Android复杂折叠工具栏转换
我有一个自定义应用程序栏视图和一个滚动视图(左侧布局),我希望自定义应用程序栏视图折叠到右侧的布局 如您所见,图像的大小应该改变,左侧和底部的填充改变,文本变小,按钮右侧的填充更少Java Android复杂折叠工具栏转换,java,android,android-layout,Java,Android,Android Layout,我有一个自定义应用程序栏视图和一个滚动视图(左侧布局),我希望自定义应用程序栏视图折叠到右侧的布局 如您所见,图像的大小应该改变,左侧和底部的填充改变,文本变小,按钮右侧的填充更少 如何使用折叠工具栏实现平滑过渡?一种解决方案是使用MotionLayout并对其进行自定义,使其具有折叠工具栏布局行为。这样的过渡非常顺利。我记得在Google i/O中,他们展示了MotionLayout,其中一个展示柜将其用作折叠工具栏布局 另一种解决方案是检测折叠工具栏布局的折叠和展开状态,并将视图的布局参数
如何使用折叠工具栏实现平滑过渡?一种解决方案是使用
MotionLayout
并对其进行自定义,使其具有折叠工具栏布局行为。这样的过渡非常顺利。我记得在Google i/O中,他们展示了MotionLayout
,其中一个展示柜将其用作折叠工具栏布局
另一种解决方案是检测折叠工具栏布局的折叠和展开状态,并将视图的布局参数更改为必要的要求
类似这样的东西(这段代码在kotlin中,你会明白的)
然后在onOffsetChangedListener中更改视图的布局参数
override fun onOffsetChanged(appBarLayout: AppBarLayout, offset: Int) {
when (appBarLayout.totalScrollRange) {
abs(offset) -> {
// Collapsed
val params =
(binding.titleTextView.layoutParams as ConstraintLayout.LayoutParams)
// cast to the correct parent layout params, in my case it was ConstraintLayout
//customize the layout params
params.height= 100 // its in pixel , you can easily convert dp to pixel
binding.titleTextView.layoutParams = params
binding.titleTextView.requestLayout()
}
else -> {
// Not Collapsed
val params =
(binding.titleTextView.layoutParams as ConstraintLayout.LayoutParams)
// cast to the correct parent layout params, in my case it was ConstraitLayout
//customize the layout params
params.height= 200 // its in pixel
binding.titleTextView.layoutParams = params
binding.titleTextView.requestLayout()
}
}
}
请注意,在使用折叠工具栏布局时,滚动标志非常重要,可以更改折叠工具栏的行为。这说明了标志是如何工作的。
我是这样说的:
<com.google.android.material.appbar.CollapsingToolbarLayout
...
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
一种解决方案是使用
MotionLayout
并对其进行自定义,使其具有折叠工具栏布局行为。这样的过渡非常顺利。我记得在Google i/O中,他们展示了MotionLayout
,其中一个展示柜将其用作折叠工具栏布局
另一种解决方案是检测折叠工具栏布局的折叠和展开状态,并将视图的布局参数更改为必要的要求
类似这样的东西(这段代码在kotlin中,你会明白的)
然后在onOffsetChangedListener中更改视图的布局参数
override fun onOffsetChanged(appBarLayout: AppBarLayout, offset: Int) {
when (appBarLayout.totalScrollRange) {
abs(offset) -> {
// Collapsed
val params =
(binding.titleTextView.layoutParams as ConstraintLayout.LayoutParams)
// cast to the correct parent layout params, in my case it was ConstraintLayout
//customize the layout params
params.height= 100 // its in pixel , you can easily convert dp to pixel
binding.titleTextView.layoutParams = params
binding.titleTextView.requestLayout()
}
else -> {
// Not Collapsed
val params =
(binding.titleTextView.layoutParams as ConstraintLayout.LayoutParams)
// cast to the correct parent layout params, in my case it was ConstraitLayout
//customize the layout params
params.height= 200 // its in pixel
binding.titleTextView.layoutParams = params
binding.titleTextView.requestLayout()
}
}
}
请注意,在使用折叠工具栏布局时,滚动标志非常重要,可以更改折叠工具栏的行为。这说明了标志是如何工作的。
我是这样说的:
<com.google.android.material.appbar.CollapsingToolbarLayout
...
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
您只需将
MotionLayout
与嵌套滚动视图一起使用即可。
然后,您需要在res/xml
文件夹中创建一个MotionScene
。
您可以在其中设置转换开始、结束约束集以及触发器类型(onSwipe)
这是一个很好的教程,解释了使用一个TextView
可以将MotionLayout
与嵌套滚动视图一起使用。
然后,您需要在res/xml
文件夹中创建一个MotionScene
。
您可以在其中设置转换开始、结束约束集以及触发器类型(onSwipe)
这是一个很好的教程,解释了使用一个TextView
时,该解决方案不使用折叠工具栏布局
?该解决方案不使用折叠工具栏布局
?