我使用Picasso将我的图片加载到ExpandableHeightGridView
。
当Picasso想要将位图放入GridView(ImageViews
)时,会导致很多延迟。我的适配器遵循性能指南,例如ViewHolder
。我尝试使用调整大小,裁剪和目标,但没有区别,任何想法是什么原因,我该如何解决它?
package Adapter;
public class StacksAdapter extends ArrayAdapter<Stack> {
GradientDrawable gd;
private Context mContext;
int width;
int height;
Boolean Tablet;
public StacksAdapter(Context c, int resourceId, List<Stack> items) {
super(c, resourceId, items);
mContext = c;
gd = new GradientDrawable();
gd.setColor(Color.GRAY);
}
static class ViewHolderItem {
ImageView image_front ;
FlatTextView Textview;
RelativeLayout rl;
public void setImage(final ArrayAdapter<Stack> adapter,
final Stack item, final int position, ImageView imgView,
final String id) {
String url = "some url" ;
Utility.customPicasso.load(url).placeholder(gd).resize(120, 150)
.into(imgView, new Callback() {
@Override
public void onSuccess() {
// doing something
}
@Override
public void onError() {
}
});
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderItem ViewHolder;
RelativeLayout retval = null;
Stack stack = getItem(position);
if (convertView != null) {
retval = (RelativeLayout) convertView;
ViewHolder = (ViewHolderItem) convertView.getTag();
}
else {
ViewHolder = new ViewHolderItem();
LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
retval = (RelativeLayout) mInflater.inflate(R.layout.stack_object,
null);
ViewHolder.image_back = (ImageView) retval
.findViewById(R.id.stack_object_image2);
ViewHolder.rl = (RelativeLayout) retval
.findViewById(R.id.stack_object_rl);
}
ViewHolder.Textview.setText(stack.title);
ViewHolder.rl.setPadding(30, 0, 30, 0);
ViewHolder.setImage(this, stack, position,
ViewHolder.image_front, stack.image_front_id);
retval.setTag(ViewHolder);
return retval;
}
}
这是我的自定义Picasso,我在app启动时配置一次,我只为其连接设置了标题:
public static void ConfigurePicasso(Context context) {
OkHttpDownloader downloader = new OkHttpDownloader(context) {
@Override
protected HttpURLConnection openConnection(Uri uri)
throws IOException {
HttpURLConnection connection = super.openConnection(uri);
connection.setRequestProperty("something",
some value);
return connection;
}
};
Picasso.Builder builder = new Picasso.Builder(context);
builder.downloader(downloader);
builder.requestTransformer(RequestTransformer.IDENTITY);
builder.memoryCache(new LruCache(context));
builder.executor(Executors.newSingleThreadExecutor());
customPicasso = builder.build();
}
答案 0 :(得分:0)
我明白了!我在我的适配器中有一些数据库事务,我对它们进行了评论,现在它的工作非常出色。我知道打开和关闭数据库可能会花费资源,但问题是滞后仅在setImageBitmap时间,而不是任何其他时间。对我来说仍然是一种谜,但终于完成了。
现在我将数据库中的所有数据保存在列表中,然后在我的getView中使用该列表。非常顺利。