Ответ 1
Метод .into
предоставляет второй аргумент, который является обратным вызовом к успеху и сбою. Вы можете использовать это, чтобы отслеживать, когда все три были вызваны и действуют на их видимость сразу.
Я хочу использовать Picasso для загрузки трех последовательных изображений один поверх другого в виде списка. Использование методов, предлагаемых Picasso, делает это проще. Однако, поскольку эти изображения загружаются в разное время, это вызывает мерцающий эффект по мере поступления изображений. Например, иногда изображение 2 появляется перед изображением 1, а при загрузке изображения 1 вызывает неестественное заикание. Было бы лучше, если бы я мог установить видимость списка на невидимую, пока все изображения не будут доступны для отображения. Однако для Picasso не существует метода обратного вызова, который бы сигнализировал, когда изображение было загружено.
Кто-нибудь знает о решении для такого рода ситуаций, используя Picasso?
Спасибо
Метод .into
предоставляет второй аргумент, который является обратным вызовом к успеху и сбою. Вы можете использовать это, чтобы отслеживать, когда все три были вызваны и действуют на их видимость сразу.
Вот простой пример, как воспрепятствовать обратному вызову при загрузке изображений Пикассо:
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
}
});
В последней версии Picasso onError получает исключение в качестве параметра и использует get() вместо with()
Picasso.get()
.load(imageUrl)
.into(imageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
//do smth when picture is loaded successfully
}
@Override
public void onError(Exception ex) {
//do smth when there is picture loading error
}
});
Вы можете реализовать обратный вызов с помощью 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;
}
}
Это загрузка изображения URL в просмотр изображений с простыми обратными вызовами Пикассо
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) {
}
};
Вы можете использовать объект Target
. Как только target1
получает обратный вызов, вы можете загрузить второй актив, затем получить обратный вызов в target2
, а затем запустить третью загрузку.