Ich habe eine GridView
. Die Daten von GridView
sind eine Anfrage von einem Server.
Hier ist das Artikellayout in 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>
Ich fordere Daten vom Server an, erhalte die Bild-URL und lade das Bild auf 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;
}
}
und da ist der Code der getView(int position, View convertView, ViewGroup parent)
Methode im Adapter
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
Die Bildgröße ist 210*210
. Ich führe meine Anwendung auf meinem Nexus 4 aus. Das Bild füllt zwar die ImageView
Breite, aber die ImageView
Höhe skaliert nicht. ImageView
zeigt nicht das ganze Bild.
Wie löse ich dieses Problem?
fill_parent
für Breite ist nur eine gute Praxis, eine feste Größe funktioniert auch.Ich mag die Antwort von arnefm, aber er hat einen kleinen Fehler gemacht (siehe Kommentare), den ich zu korrigieren versuchen werde:
Auf
ImageView
diese Weise werden Sie richtig skaliert und haben keine Dimensionsprobleme, wenn Sie (zum Beispiel) in setzenScrollView
quelle
there
ist ein LinkIch hatte einmal ein ähnliches Problem. Ich habe es gelöst, indem ich eine benutzerdefinierte ImageView erstellt habe.
Überschreiben Sie dann die onMeasure-Methode der Bildansicht. Ich glaube, ich habe so etwas gemacht:
Dadurch wird das Bild so gedehnt, dass es auf den Bildschirm passt, während das Seitenverhältnis beibehalten wird.
quelle
android:layout_height="wrap_content"
. In diesem FallMeasureSpec.getSize(heightMeasureSpec)
wird0
und SieviewSideRatio
wird zur Folge hatInfinity
(keine Notwendigkeit, Wunder, kann Java - float solche Werte) . In diesem Fall sind beide Ihreheight
undwidth
wird0
.Verwenden Sie
android:scaleType="centerCrop"
.quelle
Ich habe etwas Ähnliches wie oben gemacht und dann meinen Kopf ein paar Stunden lang gegen die Wand geschlagen, weil es in einem nicht funktioniert hat
RelativeLayout
. Am Ende hatte ich folgenden Code:Und um zu verhindern
RelativeLayout
, dass die gemessene Dimension ignoriert wird, habe ich Folgendes getan:quelle
Verwenden Sie diese Eigenschaften in ImageView, um das Seitenverhältnis beizubehalten:
quelle
Dies gilt nicht, wenn Sie das Bild in ImageView als Hintergrund festlegen und es auf src (android: src) einstellen müssen.
Vielen Dank.
quelle
Gehen Sie wie folgt vor, um ein Bild zu erstellen, dessen Breite der Bildschirmbreite entspricht und dessen Höhe proportional zum Seitenverhältnis festgelegt wird.
Hoffe das hilft.
quelle
Versuchen Sie dies: Es hat das Problem für mich gelöst
quelle
Du brauchst keinen Java-Code. Du musst nur :
Der Schlüssel befindet sich im übergeordneten Element für Breite und Höhe
quelle
Versuchen Sie es mit dieser einfachen Zeile ... fügen Sie diese Zeile in Ihren XML-Code im Bildansicht-Tag ein, ohne eine Abhängigkeit hinzuzufügen. android: scaleType = "fitXY"
quelle
benutze android: ScaleType = "fitXY" im ImageView xml
quelle
Sie können versuchen, das zu tun, was Sie tun, indem Sie die Bilder manuell laden. Ich würde jedoch dringend empfehlen, einen Blick auf Universal Image Loader zu werfen .
Ich habe es kürzlich in mein Projekt integriert und ich muss sagen, es ist fantastisch. Macht all die Sorgen, Dinge asynchron zu machen, die Größe zu ändern und Bilder zwischenzuspeichern. Es ist wirklich einfach zu integrieren und einzurichten. Innerhalb von 5 Minuten können Sie es wahrscheinlich dazu bringen, das zu tun, was Sie wollen.
Beispielcode:
Dadurch können die Bilder verzögert geladen, korrekt an die Größe der Bildansicht angepasst werden, in der beim Laden ein Platzhalterbild angezeigt wird, und ein Standardsymbol angezeigt werden, wenn das Laden fehlschlägt und die Ressourcen zwischengespeichert werden.
- Ich sollte auch hinzufügen, dass diese aktuelle Konfiguration das Bildseitenverhältnis beibehält und somit auf Ihre ursprüngliche Frage anwendbar ist
quelle
Verwenden Sie einfach UniversalImageLoader und legen Sie fest
und keine Skalierungseinstellungen in ImageView
quelle
Ich hatte ein ähnliches Problem. Ich fand den Grund dafür, dass Sie das berechnen müssen
dp
. Android Studio berechnet,ImageView
wann Sie es von der ladendrawable
, aber wenn Sie eine andere Methode verwenden, wie das Laden von Bitmap, wird dasdp
nicht automatisch berücksichtigt.Hier ist meine XML
Ich verwende Kotlin und lade Drawable aus einer Asset-Datei. So berechne ich das
quelle
Verwenden Sie Picasso, das einfach zu bedienen ist.
In Ihrem Adapter ..
http://square.github.io/picasso/
quelle