Picasso第一次加载图片时ListView卡顿

3

我正在使用ViewHolder结合ListView,所以我确定这不是一个回收问题。

只有在首次加载图像时,ListView才会出现延迟,如果我向上滚动,一切都很流畅。

我的简化的getView方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
...

    mPicasso.load(cData.get("url")).into(holder.imagePreviewView);

...
}

我的 ImageView 的 XML:

 <ImageView
     android:id="@+id/imagePreview"
     android:layout_width="fill_parent"
     android:layout_height="@dimen/image_preview_height"
     android:scaleType="centerCrop"
     android:background="?attr/postPreviewBground" />

谢谢!


你是否将ListView的layout_height设置为wrap_content了?这可能会导致初始延迟。 - Pulkit Sethi
我已将它们设置为match_parent。 - vivatus
延迟是因为您在主线程上加载图像而不是非 UI 线程,从线程加载图像并最初仅具有图像占位符。 - Pulkit Sethi
将其放在另一个线程上可以有所帮助,但仍然会出现太多的卡顿。 - vivatus
我有同样的问题!!!感谢您打开这个问题!...在我的情况下,图像已经在磁盘中。这是我如何调用Picasso:/* 代码 */ Picasso.with(mContext).load(new File(cursor.getString(columnIndex))).fit().centerInside().placeholder(R.drawable.image_while_loading).error(R.drawable.image_loading_erro).into(imagem); - Renan Franca
你在listview上使用动画了吗?我发现只有在这样做时初始加载会出现滞后。 - dancingbush
2个回答

0
很可能是系统在执行GC_FOR_ALLOC来为你加载的位图分配内存。由于位图已经加载并缓存在内存中,所以向上平滑滚动。

0

我轻松地解决了这个错误。你必须在getView()内部抛出一个线程,在该线程内部编写你的代码。

试试这个方法,它有效!


我遇到了 java.lang.IllegalStateException: Method call should happen from the main thread. at com.squareup.picasso.Utils.checkMain(Utils.java:136) 的错误。 - jaynp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接