场景:我的Android应用中有两个活动:活动X和活动Y
在活动X上,有一个按钮,在单击按钮时,我正在打开活动Y。
在活动Y的OnCreate内,我正在调用Firestore数据库,并获取约10个图像链接。该图像链接是动态的,该链接也是Firebase Storage链接,在此链接上载了实际的高质量图像。
获取该图像链接后,我使用Glide库在ImageView上进行设置。
问题: 显然,为了显示10个大图像,我在Activity Y XML中添加了Scrollview,以便用户可以滚动和查看图像。但是滚动行为并不流畅。同样,这不仅仅是第一次的问题。将所有图像加载到Imageview中之后,如果我仍然尝试滚动,那么滚动也不平滑。
代码:
String str = entry.getValue().toString();
switch (entry.getKey()) {
case "link1":
setImage(binding.image1, str);
break;
case "link2":
setImage(binding.image2, str);
break;
case "link3":
setImage(binding.image3, str);
break;
case "link4":
setImage(binding.image4, str);
break;
case "link5":
setImage(binding.image5, str);
break;
}
}
private void setImage(ImageView image1, String str) {
image1.setVisibility(View.VISIBLE);
Glide.with(context).load(str).
diskCacheStrategy(DiskCacheStrategy.ALL)
.into(image1);
}
更新:
尝试使用Recycyclerview而不是Scrollview,但是甚至有可能使recycler更加流畅。我尝试使用下面的代码。
RecyclerView.SmoothScroller smoothScroller = new LinearSmoothScroller(context) {
@Override
protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_ANY;
}
};
smoothScroller.setTargetPosition(0);
mLayoutManager.startSmoothScroll(smoothScroller);
XML:
<androidx.recyclerview.widget.RecyclerView xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/app_bar"
android:clipToPadding="false"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:focusable="true"
android:overScrollMode="never"
tools:listitem="@layout/row_preview_view" />
此外,是否有任何缓存机制或某种可能?我正在使用Glide库加载图像。我可以用Glide做些什么吗?
答案 0 :(得分:4)
也许尝试将Scroll View
替换为Recycler View
。在android docs中,我们可以阅读“如果您的应用需要基于大型数据集(或经常更改的数据)显示元素的滚动列表,则应使用RecyclerView” Docs。我不确定,但是我认为使用Recycler View
会更流畅。