
Há um problema, o Bug, ou eles simplesmente queriam fazê-lo, no objeto ImageView, programação em Andróide. Se você atribuir uma largura match_parent a esse objeto, e uma altura wrap_content, no caso em que o imagem Você vai para registrar como fonte tem alguns dimensões superiores para o da ImageView, Parece haver problema alguns.
O problema Ela surge quando a imagem que é atribuída ao objeto ImageView tem um dimensões inferiores a esse objeto. Neste caso, a imagem é exibida com as dimensões originais, e Não cobre o ImageView completamente.
Em tal caso, tanto quanto jogar com os diversos Opções e atributos o objeto ImageView, Nunca obter o resultado que você deseja. Você pode modificar a propriedade scaleType, adjustViewBounds, layout_height, layout_width, … e nada, Não vai ter sucesso.
Como fazer uma imagem de um ImageView será redimensionada para o tamanho do objeto completamente
Para Obter o propósito do imagem do ImageView redimensionar para o tamanho do objeto sem perder suas proporções, a solução é criar um nova classe Java no nosso projecto que estender a classe ImageView e Fix o problema que nós temos.
Para fazer isso, em seu projeto, CREA um nova classe. Vamos chamar ResizableImageView, e seu código é o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.mypackage; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizableImageView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d == null) { super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); return; } int imageHeight = d.getIntrinsicHeight(); int imageWidth = d.getIntrinsicWidth(); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); float imageRatio = 0.0F; if (imageHeight > 0) { imageRatio = imageWidth / imageHeight; } float sizeRatio = 0.0F; if (heightSize > 0) { sizeRatio = widthSize / heightSize; } int width; int height; if (imageRatio >= sizeRatio) { width = widthSize; height = width * imageHeight / imageWidth; } else { height = heightSize; width = height * imageWidth / imageHeight; } setMeasuredDimension(width, height); } } |
Vez criado e implementado classe ResizableImageView, O que fazemos agora é modificar o XML do Layout de Ver os onde é o ImageView no que queremos fazer é redimensionar a imagem.
Deixe-nos supor que, anteriormente para alterar, o ImageView para alterar o XML é como segue:
1 2 3 4 5 6 | <ImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Bem, só tem que mudar a classe de tal objeto para o Novo classe criada, da seguinte maneira:
1 2 3 4 5 6 | <com.mypackage.ResizableImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Com isto classe e a mudança do Código XML, Alcançaremos a imagem contida em um objeto ImageView será redimensionada, mantendo sua proporcionalidade, mesmo nos casos em que imagem a uma dimensão menor do que o recipiente.
