5

最近从 iOS 移动,我意识到要处理 100 多个大图像的快速滚动,

这是一项相当多的工作,实际上您需要使用 Picasso(或者可能是 Volley)。

现在 RecyclerView 就在这里 -有没有人使用 RecyclerView 实现了许多大图像的滚动

如果是这样,您是否必须像过去那样使用毕加索(即上周)

对此有何发现?干杯

4

2 回答 2

24

RecyclerView只不过是AbsListView类的一个改进、更模块化和可扩展的版本。它为回收视图提供了更好的 API,并提供了一种使用相同 API 创建各种列表视图的方法 - 垂直、水平、网格、交错网格等。加载图像根本不是这个 API 的一部分。

因此,将图像加载到其中需要您执行与以前完全相同的操作。例如,使用毕加索:

@Override
public void onBindViewHolder(final MyViewHolder myViewHolder, final int i) {
    Picasso.withContext(mContext).load(myImageUrl).into(myViewHolder.imageView);
}

事实上,回到你的观点:

RecyclerView 是 Android 改进的列表视图,让我们可以更流畅地滚动大图像的大列表

我非常怀疑如果您已经ListAdapter以正确的方式实现了性能是否会提高:使用ViewHolder类,并正确重用convertView. 默认情况下会提供这些RecyclerView优化,因此您不必再这样做了。

于 2014-06-29T09:20:56.663 回答
0

是的,正如之前的评论所提到的,它仍然需要,但这也有帮助。

import android.support.v7.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.scrolling.PicassoFlingScrollListener;


/**
 * Example Use:
 *     mRecyclerView.setOnScrollListener(new PicassoRecyclerViewScrollListener(mPicasso));
 * 
 * @author Simon Lightfoot <simon@demondevelopers.com>
 * 
 */
public static class PicassoRecyclerViewScrollListener implements RecyclerView.OnScrollListener
{
    private final PicassoFlingScrollListener    mListener;
    private final RecyclerView.OnScrollListener mDelegate;


    public PicassoRecyclerViewScrollListener(Picasso picasso)
    {
        this(picasso, null);
    }

    public PicassoRecyclerViewScrollListener(Picasso picasso, RecyclerView.OnScrollListener delegate)
    {
        mListener = new PicassoFlingScrollListener(picasso);
        mDelegate = delegate;
    }

    @Override
    public void onScrollStateChanged(int newState)
    {
        mListener.onScrollStateChanged(null, newState);
        if(mDelegate != null){
            mDelegate.onScrollStateChanged(newState);
        }
    }

    @Override
    public void onScrolled(int dx, int dy)
    {
        if(mDelegate != null){
            mDelegate.onScrolled(dx, dy);
        }
    }
}
于 2014-07-24T21:25:00.353 回答