2

我有一个 StaggeredGridLayoutManager,它在 2 列宽的网格中加载 20 张卡片,其中包含图像(从缓存、网络或 Picasso 存储中加载)。

问题:

目前,当您向下滚动列表时,图像会在卡片滑入视图时加载,如下视频所示:

https://www.youtube.com/watch?v=1xMNmMjqEbI

所需的解决方案:

我想要的是将图像加载到屏幕外,所以有一个像这个视频这样的无缝用户体验:

https://www.youtube.com/watch?v=4c7ZID7yjII

这些视频来自一篇博客文章,该文章使用LinearLayoutManager解决了这个问题,而不是StaggeredGridLayoutManager。我似乎无法找出这个问题的等效解决方案。我对android开发相当陌生,并试图通读文档,但我似乎找不到任何导致解决方案的东西。

代码:

    // Setup RecyclerView
    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.gridview_posts);
    mRecyclerView.setHasFixedSize(true);

    // Setup StaggeredGridLayoutManager
    mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    mRecyclerView.setLayoutManager(mLayoutManager);

    // Set Adapter
    mPostsAdapter = new PostAdapter(rootView.getContext(), posts);
    mRecyclerView.setAdapter(mPostsAdapter);

    // Start RestClient & get posts
    restClient = new RestClient(getString(R.string.api_location));
    getPosts();
4

3 回答 3

3

预加载图像以显示在缓存中,因此不是在滚动列表时加载它们,而是它们已经在内存中。

 Picasso.with(this).load("url").fetch();

此外,删除 Picasso 淡入淡出动画。

Picasso.with(this).load("url").noFade().into(imageView);
于 2015-05-21T10:14:19.723 回答
0

只是想出了解决我自己问题的部分方法。将它发布给像我这样试图解决这个问题的新人。

RecyclerView 方法setItemViewCacheSize(int size)将在缓存中保留所需数量的项目,因此您不会有闪烁类型的视图加载。

尽管提前加载特定数量的视图,但我还没有找到前瞻解决方案。

于 2015-05-21T16:45:35.550 回答
0

对我来说它正在工作

Picasso.get()
 .load(uploadCurrent.getImageUrl())
 .placeholder(R.drawable.logoblack_loading)
 .config(Bitmap.Config.RGB_565)
 .into(holder.imageView);

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ImageView
        android:id="@+id/id_imgItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"/>
    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/id_imgItem"
        android:paddingTop="4dp"
        android:paddingBottom="4dp"
        android:gravity="center_horizontal"
        android:textSize="18sp"/>

</RelativeLayout>
于 2019-08-15T08:45:03.977 回答