J'en ai un GridView
. Les données GridView
sont demandées par un serveur.
Voici la disposition des éléments dans GridView
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/analysis_micon_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/half_activity_vertical_margin"
android:paddingLeft="@dimen/half_activity_horizontal_margin"
android:paddingRight="@dimen/half_activity_horizontal_margin"
android:paddingTop="@dimen/half_activity_vertical_margin" >
<ImageView
android:id="@+id/ranking_prod_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/ranking_rank_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Je demande des données au serveur, j'obtiens l'URL de l'image et charge l'image sur Bitmap
public static Bitmap loadBitmapFromInputStream(InputStream is) {
return BitmapFactory.decodeStream(is);
}
public static Bitmap loadBitmapFromHttpUrl(String url) {
try {
return loadBitmapFromInputStream((InputStream) (new URL(url).getContent()));
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return null;
}
}
et il y a le code de getView(int position, View convertView, ViewGroup parent)
méthode dans l'adaptateur
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
La taille de l'image est 210*210
. J'exécute mon application sur mon Nexus 4. L'image remplit la ImageView
largeur, mais la ImageView
hauteur n'est pas mise à l'échelle. ImageView
n'affiche pas l'image entière.
Comment résoudre ce problème?
fill_parent
pour la largeur n'est qu'une bonne pratique, une taille fixe fonctionne également.J'aime la réponse de arnefm mais il a fait une petite erreur (voir commentaires) que je vais essayer de corriger:
Ainsi, votre
ImageView
sera mis à l'échelle correctement et n'aura aucun problème de dimension si (par exemple) mis à l'intérieur deScrollView
la source
there
un lienJ'ai eu un problème similaire une fois. Je l'ai résolu en créant une ImageView personnalisée.
Remplacez ensuite la méthode onMeasure de l'imageview. J'ai fait quelque chose comme ça, je crois:
Cela étirera l'image pour l'adapter à l'écran tout en conservant le rapport d'aspect.
la source
android:layout_height="wrap_content"
. Dans ce cas, ceMeasureSpec.getSize(heightMeasureSpec)
sera0
et votreviewSideRatio
résultatInfinity
(pas besoin de vous demander, Java float autorise de telles valeurs.) Dans ce cas, votreheight
etwidth
sera0
.Utilisez
android:scaleType="centerCrop"
.la source
J'ai fait quelque chose de similaire à ce qui précède, puis je me suis cogné la tête contre le mur pendant quelques heures car cela ne fonctionnait pas à l'intérieur d'un
RelativeLayout
. Je me suis retrouvé avec le code suivant:Et puis pour éviter
RelativeLayout
d'ignorer la dimension mesurée, j'ai fait ceci:la source
Utilisez ces propriétés dans ImageView pour conserver les proportions:
la source
Cela ne sera pas applicable si vous définissez l'image comme arrière-plan dans ImageView, devez la définir sur src (android: src).
Merci.
la source
Pour créer une image dont la largeur est égale à la largeur de l'écran et la hauteur définie proportionnellement en fonction du rapport d'aspect, procédez comme suit.
J'espère que cela t'aides.
la source
Essayez ceci: cela a résolu le problème pour moi
la source
Vous n'avez pas besoin de code java. Il vous suffit de:
La clé est dans le parent de correspondance pour la largeur et la hauteur
la source
essayez avec cette ligne simple ... ajoutez cette ligne dans votre code xml dans la balise de vue d'image sans ajouter de dépendance android: scaleType = "fitXY"
la source
utiliser android: ScaleType = "fitXY" im ImageView xml
la source
Vous pouvez essayer de faire ce que vous faites en chargeant manuellement les images, mais je recommanderais très fortement de jeter un œil à Universal Image Loader .
Je l'ai récemment intégré à mon projet et je dois dire que c'est fantastique. Fait tout le souci de rendre les choses asynchrones, de redimensionner, de mettre en cache des images pour vous. C'est très facile à intégrer et à configurer. En 5 minutes, vous pouvez probablement le faire faire ce que vous voulez.
Exemple de code:
Cela peut paresseusement charger les images, les adapter correctement à la taille de l'imageView montrant une image d'espace réservé pendant le chargement, et montrant une icône par défaut si le chargement échoue et la mise en cache des ressources.
- Je dois également ajouter que cette configuration actuelle conserve le rapport hauteur / largeur de l'image, donc applicable à votre question d'origine
la source
Utilisez simplement UniversalImageLoader et définissez
et aucun paramètre d'échelle sur ImageView
la source
J'ai eu un problème similaire, j'ai trouvé la raison de cela parce que vous devez calculer le
dp
. Android studio calcule leImageView
moment où vous le chargez depuis ledrawable
, mais lorsque vous utilisez une autre méthode, comme le chargement à partir du bitmap, ledp
n'est pas automatiquement pris en compte,Voici mon xml
J'utilise Kotlin et je charge le dessin à partir d'un fichier d'actif, voici comment je calcule cela
la source
Utilisez picasso qui est facile à utiliser ..
Dans votre adaptateur ..
http://square.github.io/picasso/
la source