2

2列幅のグリッドに画像(キャッシュ、ネットワーク、またはPicassoのストレージからロードされた)を含む20枚のカードをロードするStaggeredGridLayoutManagerがあります。

問題:

現在、リストを下にスクロールすると、このビデオのようにカードがスライドして表示されるように画像が読み込まれます。

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

望ましい解決策:

私が実現したいのは、画像がオフスクリーンで読み込まれるようにすることです。そのため、このビデオのようなシームレスな UX があります。

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

これらのビデオは、StaggeredGridLayoutManagerではなくLinearLayoutManagerを使用してこの問題を解決するブログ投稿からのものです。この問題の同等の解決策を見つけられないようです。私は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.with(this).load("url").noFade().into(imageView);
于 2015-05-21T10:14:19.723 に答える
0

私自身の問題の部分的な解決策を見つけました。これを理解しようとしている私のような新しい人のために投稿します。

RecyclerView メソッドsetItemViewCacheSize(int size)は、必要な量のアイテムをキャッシュに保持するため、ビューのちらつきタイプの読み込みはありません。

特定の量のビューを事前にロードするための先読みソリューションは見つかりませんでした。

于 2015-05-21T16:45:35.550 に答える