毕加索图像加载回调

时间:2014-06-06 00:04:36

标签: java android picasso

我想使用毕加索在列表视图中将三个连续图像一个加载到另一个上面。使用Picasso提供的方法可以轻松实现。然而,因为这些图像在不同时间加载,所以当图像进入时会引起闪烁效果。例如,有时图像2出现在图像1之前,并且当图像1加载时,它会导致不自然的口吃。如果我可以将listview的可见性设置为不可见,直到可以显示所有图像,那会更好。但是,我没有找到Picasso的回调方法,它会在图像加载时发出信号。

有没有人知道使用毕加索这种情况的解决方案?

由于

5 个答案:

答案 0 :(得分:58)

.into方法提供了第二个参数,它是对成功和失败的回调。您可以使用它来跟踪所有三个被调用的时间,并立即对其可见性进行操作。

Javadoc:https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/RequestCreator.html#into-android.widget.ImageView-com.squareup.picasso.Callback-

答案 1 :(得分:32)

这是一个简单的例子,说明如何使Picasso图片加载回调:

Picasso.with(MainActivity.this)
            .load(imageUrl)
            .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {
                            //do smth when picture is loaded successfully

                        }

                        @Override
                        public void onError() {
                            //do smth when there is picture loading error
                        }
                    });

答案 2 :(得分:9)

您可以使用Picasso实现回调,如下所示:

ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().resize(width, height).into(image, new Callback() {
            @Override
            public void onSuccess() {
                layout.setVisibility(View.VISIBLE);
            }

            @Override
            public void onError() {

            }
        });
}

我的ImageHandler类的实现如下所示:

public class ImageHandler {

    private static Picasso instance;

    public static Picasso getSharedInstance(Context context)
    {
        if(instance == null)
        {
            instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build();
        }
        return instance;
    }
}

答案 3 :(得分:3)

这是通过简单的毕加索回调将图像网址加载到图像视图中

           Picasso.with(this)
            .load(Picurl)
            .into(Imageview, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {


                        }
                    }
            );

这是毕加索图片加载,带有更多回调

private void loadImage() {
    Picasso.with(this)
            .load(PicURL)
            .into(mContentTarget);
  }


private Target mContentTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    Imageview.setImageBitmap(bitmap);
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
    }
};

答案 4 :(得分:0)

您可以使用Target对象。一旦target1收到回调,您就可以下载第二个资产,然后在target2中获得回调,然后触发第三次下载。