Масштаб 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)
    }
});

Другие вопросы по тегам