我的活动如何在Android中使用大量高质量图像顺利运行?

时间:2020-06-15 19:13:12

标签: android

场景:我的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做些什么吗?

1 个答案:

答案 0 :(得分:4)

也许尝试将Scroll View替换为Recycler View。在android docs中,我们可以阅读“如果您的应用需要基于大型数据集(或经常更改的数据)显示元素的滚动列表,则应使用RecyclerView” Docs。我不确定,但是我认为使用Recycler View会更流畅。

相关问题