我一直在使用Picasso的库在我的应用程序中将图像加载到我的gridview中,它的工作方式和我看起来完全一样。但是用户告诉我图像加载速度非常慢。我知道这是因为网络速度不佳而Picasso正在加载我的完整图像,这些图像非常大,然后调整它们以适合我的图像视图。所以我尝试使用滑动,它以几乎两倍的速度加载图像,但在某些图像上,它不像毕加索那样保持结构。例如毕加索加载图像看起来像
虽然滑行加载它们在这里有不同的状态,但它最初加载的是
然后滚动后看起来像
然后最终经过大量滚动后看起来像
我非常有信心这是因为我的图像尺寸都不同而且看起来我的占位符图像的大小不同有效但我想知道的是如何让滑行保持其初始状态,或者我如何让毕加索加载更快?我听说将颜色格式从888降低到565有戏剧性的效果,任何人都可以借给我两美分吗?感谢您提出的所有建议
修改
这是我的imageview
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:id="@+id/imageView"/>
这就是我给毕加索打电话的方式
Picasso.with(getActivity())
.load(mThumbIds[position])
.placeholder(R.drawable.placeholder)
.fit()
.into(imageView);
return imageView;
这就是我现在称之为滑行的方式
Glide.with(getActivity())
.load(mThumbIds[position])
.asBitmap()
.placeholder(R.drawable.placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.error(R.drawable.ic_photos)
.into(imageView);
return imageView;
如果重要,这是我的gridview
<GridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:id="@+id/gridview"
android:numColumns="2"
android:gravity="center"
android:drawSelectorOnTop="true"
android:listSelector="@drawable/ripple"
android:stretchMode="columnWidth"
>
答案 0 :(得分:5)
默认情况下,Glide会尝试保持图像的纵横比。使用Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
((ImageButton)pair.getValue()).setImageBitmap(bitmap);
}
时,这意味着您希望整个图像在可用区域内可见并居中。切换到fitCenter()
将是确保图像填充其可用高度和宽度的第一步。
但是,您也遇到了centerCrop()
的长期问题:它假设所有列都具有相同的高度。然而,你使用GridView
作为wrap_content
的高度,导致每个元素根据传入的高度不同地调整大小(记住,从Glide的角度来看,你说你的ImageView
可以是它需要很高!)。
如果你有一个主导宽高比(比方说,16:9),你可以使用固定的宽高比视图,例如this AspectRatioImageView,它总是使用相同的高度,基于列的宽度(设置为你的ImageView
)。另一个更复杂的选项是切换到RecyclerView并使用StaggeredGridLayoutManager,这将允许您保持每个图像的纵横比并错开行,确保每个图像填充空间并保持它的宽高比。