使用RecyclerView,Picasso还有必要吗?

时间:2014-06-28 20:30:41

标签: android android-volley picasso android-recyclerview

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

这是相当多的工作,在实践中你需要使用毕加索(或者可能是Volley)。

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

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

有关此的任何调查结果?干杯

2 个答案:

答案 0 :(得分: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类,并正确重用convertViewRecyclerView默认发布这些优化,因此您不再需要这样做。

答案 1 :(得分: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);
        }
    }
}