在毕加索放置图像时查看滞后

时间:2014-08-23 11:51:33

标签: android gridview picasso

我使用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();
}

1 个答案:

答案 0 :(得分:0)

我明白了!我在我的适配器中有一些数据库事务,我对它们进行了评论,现在它的工作非常出色。我知道打开和关闭数据库可能会花费资源,但问题是滞后仅在setImageBitmap时间,而不是任何其他时间。对我来说仍然是一种谜,但终于完成了。

现在我将数据库中的所有数据保存在列表中,然后在我的getView中使用该列表。非常顺利。