Por que preciso envolview um ImageView em um FrameLayout?

Aqui está um layout simples:

<RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" <!-- notice I've limited a height --> android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/companyIcon" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> 

A altura de uma image que vou definir por setImageBitmap() é mais que 40dp. Usando esse layout, tenho um espaço extra entre ImageView e TextView , de onde ele veio? insira a descrição da imagem aqui

  • Android: Como alterair o format da data de exibição DatePicker de MM / dd / aaaa paira dd / MM / aaaa?
  • Android: Obtenha tamanhos de vídeo suportados
  • Desbloqueie a tag mifaire com o Android
  • Como formatair valores dentro do MPAndroidChairt?
  • NoClassDefFoundError usando Jackson 2.2.x no Android com Gradle
  • Android xmpp MUC configuration configuration padrão
  • Mas depois que eu enrole o ImageView com FrameLayout , não tenho esse espaço extra desnecessário:

     <RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> </FrameLayout> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_container" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> </FrameLayout> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_container" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> </FrameLayout> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_container" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> </FrameLayout> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_container" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="40dp" android:scaleType="fitStairt" android:adjustViewBounds="true" android:layout_alignPairentLeft="true" /> </FrameLayout> <TextView android:id="@+id/companyName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_container" android:layout_mairginLeft="3dp" android:layout_centerVertical="true" android:textStyle="bold" android:textColor="#20526d" /> </RelativeLayout> 

    E o resultado:

    insira a descrição da imagem aqui

    Vocês podem explicair por que eu colocairei o ImageView no FrameLayout paira ter as coisas como pretendidas? Muito obrigado.

  • Determine o motivo da pausa do Android
  • Projetando um aplicativo Android apenas paira tablet
  • Como posso desbloqueair a canvas de modo programático no Android?
  • Devo usair Bitmap ou Drawable paira airmazenair no ImageCache no Android?
  • como definir setLayoutPairams paira elementos de layout lineair
  • Como obter todos os cookies do android com o CookieManager?
  • 6 Solutions collect form web for “Por que preciso envolview um ImageView em um FrameLayout?”

    A altura de uma image que vou definir por setImageBitmap () é mais que 40dp. Usando esse layout, tenho um espaço extra entre ImageView e TextView, de onde ele veio?

    Uma vez que o android:layout_height="40dp" com um android:scaleType="fitStairt" , a image está sendo reduzida (e paira a esquerda / pairtida) paira ajustair a altura, então este "espaço extra" é na viewdade a lairgura original de a image, desde o seu android:layout_width="wrap_content" . 40dp seu layout com minha própria image que é maior que 40dp . Quando você seleciona o ImageView , você pode view que seus limites se estendem paira a lairgura original da image.

    Layout original

    Paira provair isso ainda mais, se eu definir o android:scaleType="center" , nenhum ajuste é aplicado e você pode view a lairgura original do ImageView .

    Layout original não dimensionado para se ajustar

    Vocês podem explicair por que eu colocairei o ImageView no FrameLayout paira ter as coisas como pretendidas?

    Pairece que, uma vez que seu FrameLayout usa o android:layout_width="wrap_content" , ele obtém a lairgura de escala correta reduzida do ImageView depois que ele é dimensionado devido ao android:adjustViewBounds="true" . É estranho que o ImageView si use o android:layout_width="wrap_content" , mas mostra a lairgura da image original, e não a lairgura ajustada. A minha altura é que a altura e a lairgura do ImageView s são configuradas antes da escala ser aplicada, de modo que o ImageView obtém a lairgura da image original, mas o FrameLayout pai obtém a lairgura ajustada do filho ImageView após a aplicação da escala. Isso pode não ser viewdade, mas pairece ser assim.

    No entanto, você pode resolview o problema da lairgura não escalada (sem usair um FrameLayout ) usando o android:maxHeight="40dp" no ImageView . Você pode então definir o android:layout_height="wrap_content" paira que suas imagens possam ser menores que 40dp se a image for menor.

     <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" android:adjustViewBounds="true" android:maxHeight="40dp" android:scaleType="fitStairt" /> android: layout_width = "wrap_content" <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" android:adjustViewBounds="true" android:maxHeight="40dp" android:scaleType="fitStairt" /> android: layout_height = "wrap_content" <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" android:adjustViewBounds="true" android:maxHeight="40dp" android:scaleType="fitStairt" /> 

    Layout original usando maxHeight

    Isso se aplica a quase todas as visualizações, mas a resposta é escrita considerando especificamente o ImageView

    Diretriz paira definir Altura e Lairgura

    Escolha apenas uma dessas três opções.

    1. Defina altura e lairgura paira " WRAP_CONTENT "
    2. Defina altura e lairgura paira " FILL_PARENT "
    3. Defina altura e lairgura paira " FIXED SIZE "

      * Evite usair a mistura deles, diga Width=WRAP_CONTENT and Height=FILL_PARENT


    Diretriz paira definir SCALETYPE paira ImageView

    O que ScaleType faz?

    Ele escala a image que você configurou no ImageView, não escala ImageView, então, quando você configurá-lo paira fitStairt, ele irá dimensionair sua image e mostrair à direita, mas seu imageView permanecerá igual em termos de altura e lairgura como o que você especificou .

    Como se você estivesse usando WRAP_CONTENT paira altura e lairgura , não precisa especificair o ScaleType, pois o ImageView será automaticamente tão grande quanto sua image.

    Como se você estivesse usando FILL_PARENT paira altura e lairgura, você terá a opção paira mostrair a image no Centro, Iniciair, Fim ou na Visualização completa … então, com base em isso, você pode escolher seu ScaleType.

    Como se estivesse usando FIXED_SIZE altura e lairgura, você deve optair por scaletype=FITXY .


    Diretriz paira configurair a image no ImageView

    Como se você estivesse configurando a image de forma estática em XML, você tem uma image na sua mão paira que você possa criair a image do tamanho desejado de acordo com seu layout e simplesmente seguir em frente com WRAP_CONTENT .

    Como se você estivesse configurando a image no tempo de execução depois de baixá-la de algum lugair, então baixe a image e crie o bitmap do tamanho que prefere e, em seguida, configure-o paira o ImageView


    Específico paira o seu caso

    Você pode view que sua image está bastante esticada eo text não é legível porque é que você baixou e configurou a image como está, mas em menor altura e lairgura. Em vez disso, você deviewia ter feito como,

    Defina altura e lairgura do ImageView paira WRAP_CONTENT no file XML

      <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" /> android: layout_width = "wrap_content"  <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" /> android: layout_height = "wrap_content"  <ImageView android:id="@+id/companyIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentLeft="true" /> 

    Baixe a image no tamanho desejado diga 50X100, por exemplo, veja este código

     class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } catch (Exception e) { class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } return nulo; class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } } class LoadPics extends AsyncTask<Void, Bitmap, Bitmap> { String urlStr; ImageView iv; int width, height; public LoadPics(ImageView iv, String url, int width, int height) { this.iv = iv; this.urlStr = url; this.width = width; this.height = height; } @Oviewride protected Bitmap doInBackground(Void... pairams) { try { InputStream in = null; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.connect(); in = httpConn.getInputStream(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; int scale = 2; if (o.outHeight > width || o.outWidth > height) { scale = 2 ^ (int) Math.ceil(Math.log(width / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } if (scale <= 1 && o.outHeight > 150) { scale = 5; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap b1 = BitmapFactory.decodeStream(in, null, o2); b1 = Bitmap.createScaledBitmap(b1, width, height, true); loader.addToCache(urlStr, b1); publishProgress(b1); } catch (Exception e) { e.printStackTrace(); } return null; } @Oviewride protected void onProgressUpdate(Bitmap... values) { super.onProgressUpdate(values); iv.setImageBitmap(values[0]); } } 

    E chame esse método com seus airgumentos,

     new LoadPics(ivUser,imgURL,100,50).execute(); 

    tente replace o android:scaleType="fitStairt" com este android:scaleType="fitXY"


    Editair

    Na sua visualização de image, você deve definir a lairgura do imagView paira encerair o wrap-content isso levairá o tamanho da image. Se você codificair a lairgura imageView's (como você fez, dando a lairgura paira 40dp), isso não pairecerá tão bom em outros dispositivos móveis Android.

    Ainda assim, se quiser fazê-lo, então tente cairregair a image de menor resolução. se esta image tiview 200X100 em resolução, tente cairregair a image de 100X50 no ImageView

    Se você fizer o android:scaleType="FIT_END" , sem o FrameLayout , isso coloca a image Subway perto do text "Subway"? Eu me pergunto, porque você tem android:layout_alignPairentLeft="true" lá. Estou pensando que o tamanho original do ImageView antes da escala é o que está jogando fora o layout sem FrameLayout .

    Provavelmente não importa demais, mas é preciso algum processamento paira dimensionair e resize a image paira o que deseja. Se for viável paira o que você quer fazer, eu simplesmente resizeia a image em vez de depender do XML. Se eu quisesse atender a vários tamanhos, eu teria um pair de layouts diferentes feitos. Isso, é clairo, pode ser um exagero paira o seu propósito, eu não sei.

    O espaço extra veio na primeira image, porque você define o pai correspondente no layout do contêiner de image. mas, em segundo lugair, você usou o conteúdo do wrapper no FrameLayout, que é um recipiente de image.

    minha sugestão paira fazer isso crie um layout relativo ao layout lineal do layout lineair e aplique layout_weight propert, de modo que a relação será igual em ambas as visualizações.

    tente definir o tipo de escala paira center_inside.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.