Eu tenho um GridView
. Os dados de GridView
são solicitados de um servidor.
Aqui está o layout do item em 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>
Solicito dados do servidor, obtenho o URL da imagem e carrego a imagem para 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;
}
}
e existe o código do getView(int position, View convertView, ViewGroup parent)
método no adaptador
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
O tamanho da imagem é 210*210
. Eu executo meu aplicativo no meu Nexus 4. A imagem preenche a ImageView
largura, mas a ImageView
altura não é dimensionada. ImageView
não mostra a imagem inteira.
Como eu resolvo este problema?
fill_parent
para largura é apenas uma boa prática, um tamanho fixo também funciona.Eu gosto da resposta do arnefm, mas ele cometeu um pequeno erro (veja os comentários) que tentarei corrigir:
Assim, você
ImageView
será dimensionado corretamente e não terá problemas de dimensão se (por exemplo) colocar dentro deScrollView
fonte
there
é um linkEu tive um problema semelhante uma vez. Eu o resolvi criando um ImageView personalizado.
Em seguida, substitua o método onMeasure da visualização de imagem. Eu fiz algo assim, acredito:
Isso ampliará a imagem para caber na tela, mantendo a proporção.
fonte
android:layout_height="wrap_content"
. Nesse casoMeasureSpec.getSize(heightMeasureSpec)
, será0
e vocêviewSideRatio
resultará emInfinity
(não é necessário se perguntar, o Java float permite esses valores). Nesse caso, tanto o seuheight
como owidth
será0
.Use
android:scaleType="centerCrop"
.fonte
Fiz algo semelhante ao anterior e bati minha cabeça contra a parede por algumas horas porque não funcionava dentro de um
RelativeLayout
. Acabei com o seguinte código:E para evitar
RelativeLayout
ignorar a dimensão medida, fiz o seguinte:fonte
Use estas propriedades no ImageView para manter a proporção:
fonte
Isso não será aplicável se você definir a imagem como plano de fundo no ImageView, precisar definir em src (android: src).
Obrigado.
fonte
Para criar uma imagem com largura igual à largura da tela e altura definida proporcionalmente de acordo com a proporção, faça o seguinte.
Espero que isto ajude.
fonte
Tente o seguinte: resolveu o problema para mim
fonte
Você não precisa de nenhum código java. Você só tem de :
A chave está no pai de correspondência para largura e altura
fonte
tente com esta linha simples ... adicione esta linha no seu código xml na tag de visualização de imagem sem adicionar nenhuma dependência android: scaleType = "fitXY"
fonte
use android: ScaleType = "fitXY" no ImageView xml
fonte
Você pode tentar fazer o que está fazendo carregando manualmente as imagens, mas eu recomendo fortemente dar uma olhada no Universal Image Loader .
Eu o integrei recentemente no meu projeto e devo dizer que é fantástico. Preocupa-se em tornar as coisas assíncronas, redimensionando e armazenando em cache imagens para você. É realmente fácil de integrar e configurar. Dentro de 5 minutos, você provavelmente poderá fazer o que quiser.
Código de exemplo:
Isso pode carregar preguiçosamente as imagens, ajustá-las corretamente ao tamanho do imageView, mostrando uma imagem de espaço reservado durante o carregamento e mostrando um ícone padrão se o carregamento falhar e o armazenamento em cache dos recursos.
- Devo acrescentar também que essa configuração atual mantém a proporção da imagem, portanto aplicável à sua pergunta original
fonte
Basta usar o UniversalImageLoader e definir
e nenhuma configuração de escala no ImageView
fonte
Eu tive um problema semelhante, achei que o motivo é porque você precisa calcular o
dp
. Estúdio Android está calculando oImageView
quando você carregá-lo a partir dodrawable
, mas quando você estiver usando outro método, como o carregamento de bitmap dodp
não é contabilizado automaticamente,Aqui está o meu xml
Estou usando o Kotlin e carregando drawable a partir de um arquivo de ativos, veja como eu calculo isso
fonte
Use o picasso, que é fácil de usar.
No seu adaptador ..
http://square.github.io/picasso/
fonte