2013-10-14 57 views
0

它有點難以解釋,但生病嘗試它。調整ImageView以適合圖片

在ImageView中顯示圖像的Im中,imageview被設置爲使用weight屬性的50%的ScreenHeight。

現在,如果ImageAspectRatio不符合ImageView的比例,我在ImageView的底部和頂部有一個空的空間。

基本上我希望我的ImageView具有50%的ScreenHeight的maxSize,但如果圖像中沒有使用它的全高,或者至少移動到ImageView的頂部,則會縮小高度。

所以,我在這裏做的是我設置視圖的最大尺寸,我設置圖像的方式ImageView通常會。之後,我的方式爲ImageView佈局,然後得到它的高度,因爲這是我希望視圖具有的最大高度。

然後我計算我需要應用的縮放比例。我縮放圖像並將視圖設置爲包裝內容,因爲它應該將視圖先前的高度作爲邊界。

現在,這工作正常運行CyagenoMod(Android 4.2.2)的三星GT-I9000也試圖在Kindle HD上。但是當在Nexus 4上運行(運行Android 4.3)時,它似乎忽略了我所做的一切。

由此我的意思是,圖像看起來可以正確縮放(imageHeight縮放像53x後),但圖像幾乎需要整個屏幕。我不明白爲什麼它可以在其他2個設備上工作,但在Nexus上。

是否有任何關於Android 4.3 ImageView的新API我不知道?

@Override 
public void setImageResource(final int resId) { 
    //  this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f)); 
    super.setImageResource(resId); 

    getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { 

     @Override 
     public boolean onPreDraw() { 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId); 

      int width = bitmap.getWidth(); 
      int height = bitmap.getHeight(); 
      int boundingY = getHeight(); 
      int boundingX = getWidth(); 

      float xScale = ((float) boundingX)/width; 
      float yScale = ((float) boundingY)/height; 

      float scale = (xScale <= yScale) ? xScale : yScale; 

      Matrix matrix = new Matrix(); 
      matrix.postScale(scale, scale); 

      Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); 

      MyImageView.this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 

      MyImageView.super.setImageBitmap(scaledBitmap); 

      getViewTreeObserver().removeOnPreDrawListener(this); 
      return true; 
     } 
    }); 
} 

好吧,這裏是什麼即時圖試圖做/做的圖片。

resizingImageView

考慮偏藍事情的ImageView的大小,和黑色矩形,圖像的實際大小。藍色尺寸是我得到的,如果我將ImageView的大小設置爲width = matchParent和height = 0,並且權重爲0.5。這是我希望ImageView擁有的最大高度。

現在,有可能Image的寬度大於ImageView的寬度。在這種情況下,我想調整高度,以適應圖像的高度,所以我調整圖像大小,以在這些範圍內找到並將圖像設置爲WrapContent,因爲圖像是我希望視圖的確切大小。

但是這也是可能的一個圖像。 2 * width = height 在這種情況下,我不希望ImageView執行任何操作。只需保持其最大高度並顯示給出的圖像。

這樣的工作,正如我在一些設備上已經說過的,GT-I9000和亞馬遜Kindle HD,但是在Nexus 4上,具有比寬度高得多的圖像傾向於佔據整個屏幕。

我調試了這個並檢索ImageViewHeight和BitmapHeight。兩者都表示Image和ImageView是534 PX高。

我真的不明白爲什麼我在其他2個設備上工作,但不在聯繫。

<include layout="@layout/own_action_bar" /> 

<*.view.MyImageView 
    android:id="@+id/drawFragment_iv" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" 
    android:adjustViewBounds="true" 
    android:contentDescription="@string/hello" /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" > 
something in here 
<RelativeLayout/> 
<LinearLayout/> 
+2

你可以粘貼圖像什麼是你想要什麼,得到的將清除該怎麼做的圖片 –

+1

http://stackoverflow.com/questions/8232608/fit-image-into-imageview-keep-aspect - 比率和然後調整大小 - imageview-to-image-d?rq = 1 – NitroG42

+0

非常感謝,沒有看到,即使我googled了很長一段時間。 –

回答

0

通話setBackgroundResource,而不是setImageResource您的ImageView對象上,它會進行縮放以適合ImageView的圖像。

儘管它不是一個有效的方法,但如果沒有很多這樣的ImageView,這應該可以做到。