2017-02-20 5 views
2

У меня есть изображение, которое должно отображать только часть изображения (часть, которая вписывается в часть экрана). После щелчка пользователя он откроет все изображение. Но я не могу понять, как загрузить только часть изображения в изображение. Проблема в том, что Glide всегда вписывается в изображение.Как загрузить только часть изображения с помощью Glide from Firebase?

Glide.with(context) 
    .using(new FirebaseImageLoader()) 
    .load(storageReference) 
    .into(imageView); 

Как это выглядит сейчас. Красная часть - ImageView.

How it is working now

Как я хочу, чтобы он.

How I would like to have it

EDIT

Следующий код припадки, но показать все изображение, а только лишь его часть и уничтожить пропорции.

android:scaleType="fitXY" 
android:adjustViewBounds="true" 

enter image description here

+0

Вы можете использовать simpletarget для обработки изображения перед обновлением до изображения View –

+0

Любой пример как? – Michalsx

+0

Я обновил ответ –

ответ

1

Добавить масштабный тип в вашем XML из ImageView. добавить этот android:scaleType="matrix"

+0

Думаю, вы должны добавить marginRight и marginBottom в минус значение. –

+0

android: scaleType = "matrix" - это решение. У меня была проблема, у этого изображения не было достаточного количества точек для отображения изображения на дисплее из стороны в сторону. Это может быть обработано путем повторной выборки изображения или с использованием андроида: scaleY и android: scaleX. – Michalsx

+0

Хорошо, надеюсь, вам понравится мое решение. Добавьте, что вы можете применить мое второе решение также. В том, что ваш ImageView вырезается справа и снизу, и это дает вам тот же эффект, который вы хотите. –

0

Просто добавьте это к вашему ImageView

android:adjustViewBounds="true" 
    android:scaleType="fitXY" 
+0

Это просто сделает изображение подходящим для ImageView без какого-либо нежелательного фона.Но этот парень хочет отобразить часть изображения. –

+0

Спасибо, но это не похоже на решение, как вы можете видеть в моем вопросе EDIT. – Michalsx

+0

Вы пробовали другие типы? например, матрица, centercrop и т. д. –

0

Добавьте это в ваш XML

android:scaleType="fitXY" 
android:adjustViewBounds="true" 
+0

Спасибо, но это, похоже, не решение, как вы можете видеть в моем вопросе EDIT. – Michalsx

+0

Вы также можете использовать android: scaleType = "centerCrop" –

1
Glide.with(mContext) 
       .using(new FirebaseImageLoader()) 
       .load(storageReference) 
       .asBitmap() 
       .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
       .into(new SimpleTarget<Bitmap>() { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
         Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height); 
         imageView.setImageBitmap(targetBitmap); 
        } 
       }); 

Здесь вы можете изменить размер вашего растрового изображения из Glide в соответствии с вашими размерами. Но убедитесь, что ваши предоставленные размеры всегда меньше фактического растрового изображения.

Поскольку этот код используется в списке, Bitmap targetBitmap; должен быть объявлен глобально для повторного использования одного и того же объекта растрового изображения во всем списке. Это уменьшит потребление RAM вашего приложения.

Читать ссылки, связанные с кадрированием растровых изображений, если вам нужна дополнительная ясность кода Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);

Не забудьте сделать targetBitmap, как Global, в противном случае влияние памяти будет слишком высоким.

0

Хорошо, спасибо Мохаммеду Атифу, Пател Джаймину и Henry, я получаю следующее решение.

<ImageView 
android:id="@+id/ivImage" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:scaleType="matrix"/> 

Glide.with(this) 
     .using(new FirebaseImageLoader()) 
     .load(storageReference) 
     .asBitmap() 
     .into(new SimpleTarget<Bitmap>() { 
     @Override 
     public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
        Bitmap targetBitmap = Bitmap.createBitmap(resource, 0, 0, resource.getWidth(), resource.getHeight()); 
        ivImage.setImageBitmap(targetBitmap); 

        final Matrix matrix = ivImage.getImageMatrix(); 
        final float imageWidth = ivImage.getDrawable().getIntrinsicWidth(); 
        final float scaleRatio = ivImage.getWidth()/imageWidth; 
        matrix.postScale(scaleRatio, scaleRatio); 
        ivImage.setImageMatrix(matrix); 
       } 
      }); 
Смежные вопросы