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

來源:互聯網
上載者:User

標籤:

一、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  

  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  

  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  

  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  

  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了。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.