LazyColumnFor滚动不流畅

时间:2020-09-08 13:02:38

标签: android kotlin android-recyclerview android-jetpack-compose

所以,我实现了一个lazycolumnfor来处理一系列配方元素,问题是它不能平滑滚动,如果我快速滚动,它会结结巴巴直到直到最后一个元素出现为止,而不是平滑滚动。

这是我的错误,还是我需要添加其他内容?

<div class="formula__content match js-match" data-color="#ff5600" data-algorithm-type="f" style="background-color: rgb(255, 86, 0); color: rgb(0, 0, 0);">

<em class="match js-match" data-algorithm-type="f1" data-color="#f2a3ca" style="padding: 10px 0px;">

<semantics>

<annotation>jfrefeofjeroieofjerfje<apply>rofjerofjofoerjrf</apply>eorfefjfre<csymbol>feofjeroieo</csymbol>fjerfjerofjerofjofoerjrfeorfefjfrefe<annotation>ofjeroieofje</annotation>rfjerofjerofjof</annotation>

</semantics>
</em>
</div>

<br>




<div class="formula__content match js-match" data-color="#ff5600" data-algorithm-type="f" style="background-color: rgb(0, 200, 150); color: rgb(0, 0, 0);">

<em class="match js-match" data-algorithm-type="f2" data-color="#f2a3ca" style="padding: 10px 0px;">

<semantics>

<annotation>jfrefe<apply>ofjeroie</apply>ofjerfje<apply>rofjerofjofoerjrf</apply>eorfefjfre<csymbol>feofjeroieo</csymbol>fjerfjer<apply>ofjerofjofoer</apply>jrfeorfefjfrefe<annotation>ofjeroieofje</annotation>rfjerofjerofjof</annotation>

</semantics>
</em>
</div>

2 个答案:

答案 0 :(得分:3)

当前(版本1.0.0-alpha02),Jetpack Compose具有2种可组合功能,用于加载图像资源:

  1. imageResource():此可组合功能,同步加载图像资源。

  2. loadImageResource():此函数将图像加载到后台线程中,一旦加载完成,将安排重新组合,并且该函数将使用{{1 }}或LoadedResource

由于您正在同步加载图像,因此FailedResource滚动失败。

因此,您应该使用lazyColumn或Chris Banes命名为loadImageResource()的库,该库可以使用Coil图像加载库从外部资源(例如网络)中获取并显示图像。

更新:

使用Accompanist

首先,添加Accompanist Gradle依赖项,然后简单地使用CoilImage可组合函数:

CoilImage

使用 CoilImage(data = R.drawable.header)

loadImageResource()

注意:我在 val deferredImage = loadImageResource( id = R.drawable.header, ) val imageModifier = Modifier.preferredHeight(150.dp).fillMaxWidth() .clip(shape = RoundedCornerShape(8.dp)) deferredImage.resource.resource?.let { Image( asset = it, modifier = imageModifier ) } 中尝试了两种方式,尽管LazyColumnFor的表现要好于loadImageResource(),但仍然无法流畅滚动。

因此,我强烈建议使用imageResource()

注2:要使用Glide或毕加索,请检查Vinay Gaba的this repository

答案 1 :(得分:1)

另一方面,LazyColumn 还没有针对滚动性能进行优化,但我刚刚在 1.0.0-beta07 版本上进行了测试,可以确认它比 1.0.0-beta06 更流畅

Compose.UI 1.0.0-beta07 相关变更日志:

<块引用>

LazyColumn/Row 现在最多可以保持 2 个以前可见的项目处于活动状态(未处理),即使它们已经被滚动出来。这允许组件在我们需要组合新项目以提高滚动性能时重用活动的子组合。 (ie5555)