2017-02-20 1 views
2

J'ai imageview, qui devrait montrer seulement une partie de l'image (partie qui correspond à une partie de l'écran). Après le clic de l'utilisateur, il va ouvrir l'image entière. Mais je ne peux pas comprendre, comment charger seulement une partie de l'image en imageview. Le problème est que Glide adapte l'image à l'imageview, toujours.Comment charger une partie de l'image avec Glide depuis Firebase?

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

Comment ça marche maintenant. La partie rouge est ImageView.

How it is working now

Comment je souhaite avoir.

How I would like to have it

EDIT

code suivant crises, mais il montre l'image entière, que seule une partie et détruire des proportions.

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

enter image description here

+0

Vous pouvez utiliser simpletarget pour traiter l'image avant la mise à jour vers imageView –

+0

Un exemple comment? – Michalsx

+0

J'ai mis à jour la réponse –

Répondre

1

Ajouter type d'échelle dans votre XML de ImageView. Ajouter cette android:scaleType="matrix"

+0

Je pense que vous devriez ajouter marginRight et marginBottom en valeur négative. –

+0

android: scaleType = "matrice" est la solution. J'ai eu un problème, cette image n'avait pas suffisamment de point pour couvrir l'image vue sur l'affichage d'un côté à l'autre. Cela peut être manipulé en rééchantillonnant l'image ou en utilisant android: scaleY et android: scaleX. – Michalsx

+0

Bon, j'espère que vous aimez ma solution. Ajouter vous pouvez également appliquer ma deuxième solution. En ce que votre ImageView couper de droite et de bas et qui vous donne le même effet que vous voulez. –

0

Il suffit de l'ajouter à votre Imageview

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

Cela va juste faire l'image à ImageView sans arrière-plan indésirable.Mais ce mec veut qu'une partie de l'image soit affichée. –

+0

Merci, mais cela ne semble pas être une solution, comme vous pouvez le voir dans ma question EDIT. – Michalsx

+0

avez-vous essayé d'autres scalétypes? comme la matrice, centercrop etc –

0

Ajouter ceci dans votre xml

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

Merci, mais cela ne semble pas être une solution, comme vous pouvez le voir dans ma question EDIT. – Michalsx

+0

Vous pouvez également utiliser 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); 
        } 
       }); 

Ici vous pouvez redimensionner votre image bitmap Glide selon vos dimensions. Mais assurez-vous que les dimensions fournies sont toujours plus petites que le bitmap réel.

Étant donné que vous utilisez ce code dans la liste, Bitmap targetBitmap; doit être déclaré globalement pour réutiliser le même objet bitmap dans la liste. Cela permettra de réduire la consommation de RAM de votre application.

liens Lire liés à bitmaps culture si vous avez besoin de plus de clarté pour le code Bitmap targetBitmap = Bitmap.createBitmap(resource, x, y, width, height);

Ne pas oublier de faire targetBitmap comme mondial, sinon l'impact de la mémoire sera trop élevé.

0

Ok, merci à Mohammed Atif, Patel Jaimin et Henry, je me retrouve avec la solution suivante.

<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); 
       } 
      });