【android】ImageView的src和background的區別以及兩者的妙用


一、ImageView中XML屬性src和background的區別:

background會根據ImageView組件給定的長寬進行拉伸,而src就存放的是原圖的大小,不會進行拉伸 。src是圖片內容(前景),bg是背景,可以同時使用。

此外: scaleType只對src起作用;bg可設置透明度,比如在ImageButton中就可以用android:scaleType控制圖片的縮放方式

二、 解決android:background背景圖片被拉伸問題 :

如上所述,background設置的圖片會跟View組件給定的長寬比例進行拉伸。舉個例子, 36x36 px的圖標放在 xhdpi 文件夾中,在854x480(FWVGA,對應hdpi)環境下,按照

xhdpi : hdpi : mdpi: ldip = 2 : 1.5 : 1 : 0.75

的比例計算,在FWVGA下,圖標的實際大小應該是 27x27。

但是當我把它放到一個 layout_width = 96px, layout_height = 75px 的 LinearLayout,布局代碼如下:

[html] view plain copy 在CODE上查看代碼片 派生到我的代碼片

  1. < LinearLayout   android:gravity = "center"   android:layout_width = "96px"   android:layout_height = "75px"    >   
  2.      < ImageButton   android:layout_width = "wrap_content"   android:layout_height= "wrap_content"   android:background = "@drawable/toolbar_bg" />       
  3. </ LinearLayout >   

實際情況是,我們得到的ImageButton的大小是 33x27,很明顯width被拉伸了,這是我們不想看到的情況。

解決方案一:

代碼中動態顯式設置ImageButton的layout_width和layout_width,如下

[java] view plain copy 在CODE上查看代碼片 派生到我的代碼片

  1. LinearLayout.LayoutParams layoutParam =  new  LinearLayout.LayoutParams( 27 ,  27 );  
  2. layout.addView(imageButton, layoutParam);  

不過,事實上我們並不希望在代碼存在“硬編碼”的情況。

解決方案二:

在你通過setBackgroundResource()或者在xml設置android:background屬性時,將你的background以XML Bitmap的形式定義,如下:

[html] view plain copy 在CODE上查看代碼片 派生到我的代碼片

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < bitmap   xmlns:android = "http://schemas.android.com/apk/res/android"   
  3.      android:id = "@id/toolbar_bg_bmp"   
  4.      android:src = "@drawable/toolbar_bg"   
  5.      android:tileMode = "disabled"   android:gravity = "top"   >   
  6. </ bitmap >   

調用如下:

imageButton.setBackgroundResource(R.drawable.toolbar_bg_bmp)

或者

<ImageButton ...  android:background="@drawable/toolbar_bg_bmp" ... />

若背景圖片有多種狀態,還可參照toolbar_bg_selector.xml:

[html] view plain copy 在CODE上查看代碼片 派生到我的代碼片

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < selector   xmlns:android = "http://schemas.android.com/apk/res/android"   >   
  3.      < item   android:state_pressed = "true"   >   
  4.          < bitmap   android:src = "@drawable/toolbar_bg_sel"   android:tileMode = "disabled"   android:gravity = "top"   />   
  5.      </ item >   
  6.      < item   >   
  7.          < bitmap   android:src = "@drawable/toolbar_bg"   android:tileMode = "disabled"   android:gravity = "top"   />   
  8.      </ item >   
  9. </ selector >   

如此,不管是通過代碼方式setBackgroundResource()或XML android:background方式設置背景,均不會產生被拉伸的情況。

三、 imageButton 使用透明圖片 :

在Android上有很多不規則按鈕。如:

這個時候,我們如果想做成不規則按鈕的話,第一步就是搞一張邊緣透明的png圖片,然后用src指定到他,這個時候我們會發現,還沒有達到要的效果,還有圖片周圍還是有一層渲染。此時還要搞第二步:需要對ImageButton設置背景屬性android:background="#00000000",就實現了不規則按鈕的效果了。如圖:

有朋友可能會說, 直接用background指定該圖片就ok啦, 可是,如果用 background指定,會使圖片填充整個imageButton.比如imageButton長寬200,而圖片長款只有50,那么圖片就會被拉伸4倍變模糊。而我們要達到的效果不是為了填充。像上面錘子圖標一樣。占中間一部分就OK了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM