Android: Como impedir que a imagem seja escalada no ImageView ou ImageButton?
-
18-09-2019 - |
Pergunta
Como posso impedir que meu bitmap seja escalado automaticamente em um ImageView ou ImageButton se a visualização ou o botão for esticado usando "Fill_parent" ou usando "Peso"?
Isso será útil, por exemplo, para criar uma barra de ferramentas de 4 botões na parte superior da tela, onde os botões estão igualmente espaçados, mas as imagens dentro dos botões continuam sendo forçadas, mesmo que eu use o Scaletype = "Center", o que deve impedir Escalando de acordo com o documento, mas não.
Qualquer insight é apreciado!
Obrigado,
Solução
Descobri que, ao usar o Android: o plano de fundo automaticamente escala a imagem que você está usando para o tamanho da exibição.
Tentei usar o Android: SRC para colocar a imagem na vista. A imagem não escalou, mas eu não conseguia fazer a imagem centralizada em relação ao tamanho da exibição.
Então eu tentei fazer o botão inteiro seu próprio layout relativo e foi isso que usei:
<RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<ImageButton android:id="@+id/ImageButton01"
android:layout_height="fill_parent"
android:layout_width="fill_parent"></ImageButton>
<ImageView android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cardback1"
android:layout_centerInParent="true"></ImageView>
</RelativeLayout>
O ImageButton está em segundo plano e sempre terá o mesmo tamanho que o layout. O ImageView, no entanto, sempre permanecerá centrado no RelativeLayout e não será escalado. Dessa forma, o próprio RelativeLayout pode crescer e se mover, e a imagem em cima do botão sempre permanecerá do mesmo tamanho, mas o botão aumentará. A imagem encolherá, no entanto, se o layout se tornar menor que a própria imagem.
Eu acho que é isso que você estava procurando. Pode haver uma maneira melhor de fazer isso, mas isso é tudo o que posso criar agora.
Outras dicas
Simplesmente modifique o seu desenho, aplique um fundo transparente maior. Digamos que meu desenhado no HDPI seja 41*48 px icon.png. Criei uma nova imagem 60*60 px com um plano de fundo transparente, copie o ícone anterior.png e salvo com o mesmo nome. Dessa forma, você não precisa tocar seus layouts.
Então você pode verificar a zona de botão maior se aplicar um não transparente Android: fundo:
<ImageButton android:id="@+id/widget_open"
android:src="@drawable/icon_widget_arrow_up"
android:background="#ff777777"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></ImageButton>
Aplique o anterior e o novo desenhado a Android: Src , você deve ver claramente a área do Button.
A propósito, estou executando o aplicativo no modo de compatibilidade.
Se a imagem estiver escalada, verifique se você não está executando seu aplicativo no modo de compatibilidade (por exemplo, se você segmentar o Android 1.5/1.6 sem suportar várias densidades e executar o aplicativo no Android 2.0.)