Android 有了RecyclerView,毕加索还有必要吗?

Android 有了RecyclerView,毕加索还有必要吗?,android,android-volley,picasso,android-recyclerview,Android,Android Volley,Picasso,Android Recyclerview,最近翻看iOS,我意识到要处理100秒大图像的快速滚动 这是相当多的工作,实际上你需要使用毕加索(或者截击) 现在有了RecyclerView-有人使用RecyclerView实现了许多大型图像的滚动吗 如果是这样,你是否必须像过去那样使用毕加索(即上周) 有什么发现吗?CheersRecyclerView只不过是AblistView类的改进、更模块化和可扩展版本。它为回收视图提供了更好的API,并提供了一种使用相同API创建各种列表视图的方法—垂直、水平、网格、交错网格等等。加载图像完全不是此

最近翻看iOS,我意识到要处理100秒大图像的快速滚动

这是相当多的工作,实际上你需要使用毕加索(或者截击)

现在有了RecyclerView-有人使用RecyclerView实现了许多大型图像的滚动吗

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


有什么发现吗?Cheers

RecyclerView
只不过是
AblistView
类的改进、更模块化和可扩展版本。它为回收视图提供了更好的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
会提供这些优化,因此您不必再这样做了。

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

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);
        }
    }
}
导入android.support.v7.widget.RecyclerView;
导入com.squareup.picasso.picasso;
导入com.squareup.picasso.scrolling.PicassoFlingScrollListener;
/**
*示例用法:
*setOnScrollListener(新的PicassorEcyclServiceScrollListener(mPicasso));
* 
*@作者西蒙·莱特福特
* 
*/
公共静态类PicassoreCyclServiceScrollListener实现了RecycleView.OnScrollListener
{
私人决赛毕加索·弗林斯克罗姆利斯滕纳;
私有最终回收视图.OnScrollListener mDelegate;
公共毕加索(毕加索)
{
这个(毕加索,空);
}
公共毕加索RecyclServiceScrollListener(毕加索毕加索,RecyclView.OnScrollListener代表)
{
mListener=新毕加索·弗林斯克罗尔监听器(毕加索);
mDelegate=代表;
}
@凌驾
CrollStateChanged上的公共无效(int newState)
{
msListener.onScrollStateChanged(null,newState);
if(mDelegate!=null){
mDelegate.onScrollStateChanged(newState);
}
}
@凌驾
已填空的公共空间(整数dx,整数dy)
{
if(mDelegate!=null){
mDelegate.onScrolled(dx,dy);
}
}
}

考虑到
RecyclerView
已经提供了约48小时,目前大多数开发人员无法使用它(它只是AAR格式),您会发现很少有人使用过它。此外,
RecyclerView
不会异步下载图像并准备使用,这正是毕加索所做的。你具体希望做什么才能消除对毕加索的需求?嗨,CW。。。“此外,RecyclerView不会异步下载图像并准备使用”。。。你知道,这正是我真正想问的:据我所知,RecyclerView是Android改进的列表视图,这样我们可以更平滑地滚动大型图像列表,“更像在iOS上”。我想知道它的全部意义是否在于它回收了图像(如果它所做的只是让你把电池拆开,然后再装一次——这有点让人打哈欠)。所以,我想知道这个新的R.V.如何影响我们当前的典型工作流程!啊,啊,啊!如果您已经以正确的方式实现了ListAdapter,我高度怀疑性能是否会提高……非常有趣,Niek,谢谢!你一针见血。在某种程度上,我想这就是我真正想问的。“新的RecyclerView只是一种形式化的‘最佳方式’列表视图,每个人都必须使用它,还是它又是其他东西……”谢谢!的确他们可能在幕后做了一些优化,这可能会稍微提高性能,但我认为这不如
ViewHolder
和重用
convertView
提供的优化重要。毕竟,这是一个从头开始编写的新类。如果这是正确答案,您应该将其标记为正确答案。在这种情况下,毕加索会像以前的ListView适配器那样负责取消请求吗?或者我们应该在onViewRecycled(ViewHolder)中处理它吗?@Joe我认为我的列表和GridView的实现方式是“正确的”,但recyclerviews仍然大大提高了我的性能。