Масштаб TouchImageView масштабируется до кадра с помощью Picasso
Я использовал библиотеку Universal Image Loader для загрузки набора изображений и TouchImageView для разрешения масштабирования. Я решил заменить Universal Image Loader на Picasso. Все работало нормально, за исключением того, что теперь изображение увеличивается вокруг рамки, которая немного больше, чем изображение.
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
assert imageLayout != null;
TouchImageView imageView = (TouchImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
spinner.setVisibility(View.INVISIBLE);
Picasso.with(getApplicationContext()).setIndicatorsEnabled(false);
Picasso.with(getApplicationContext()).load(images[position]).into(imageView,new Callback() {
@Override
public void onSuccess() {
spinner.setVisibility(View.GONE);
}
@Override
public void onError() {
}
});
view.addView(imageLayout, 0);
return imageLayout;
Я ломал голову за это несколько часов. Это какая-то проблема TouchImageView с Пикассо? Любая помощь будет заметна. Благодарю.
4 ответа
Махрам Фоади разместил здесь отличное решение, которое работает и для меня:
Picasso.with(context).load (someUri).into(new Target () {
@Override
public void onBitmapLoaded (final Bitmap bitmap,
final Picasso.LoadedFrom loadedFrom) {
someTouchImageView.setImageBitmap (bitmap);
}
@Override
public void onBitmapFailed (final Drawable drawable) {
Log.d(TAG, "Failed");
}
@Override
public void onPrepareLoad (final Drawable drawable) {
someTouchImageView.setImageDrawable (drawable);
}
});
Надеюсь, что это поможет другим людям, как мы, использовать TouchImageView с Пикассо;)
Я понял, что вся проблема как-то исправлена, когда я установил ширину и высоту изображения от wrap_content до fill_parent.
Вот если вы используете Glide. Glide быстрее в загрузке, чем Picasso и дешевле в использовании памяти
Glide.with(context).load(url).asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
someTouchImageView.setImageBitmap(resource);
}
});
Для тех, кто все еще сталкивается с этой проблемой.
Как вдохновлен комментарием в этом выпуске:
Это связано с тем, что требуется размер представления, и он недоступен в реализации TouchImageView до того, как будет установлено растровое изображение.
Загрузите изображение послеTouchImageView
создается с использованием.post()
.
Код Котлина:
touchImageView.post { // Load the image when the view is ready
Picasso.get()
.load(file)
.placeholder(R.drawable.image_placeholder)
.into(touchImageView)
}
Java-код:
// Load the image when the view is ready
touchImageView.post(new Runnable() {
@Override
public void run() {
Picasso.get()
.load(file)
.placeholder(R.drawable.image_placeholder)
.into(touchImageView)
}
});