2011-11-18 65 views
34

就像它本身一樣簡單。我想打一個字母鍵,這將有選擇的繪製是這樣的:有沒有辦法使用XML設置drawable的Alpha?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- Play/Pause --> 
    <item android:state_selected="false" android:drawable="@drawable/item" /> 
    <item android:state_selected="true" android:drawable="@drawable/item" /> 

</selector> 

我會想要做這樣的事情:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- Play/Pause --> 
    <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" /> 
    <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" /> 

</selector> 

感謝所有。

+0

我仍然在試圖弄清楚這一點爲好。運氣好的話? – lostintranslation

回答

7

我不認爲有辦法做到這一點。有一個屬性android:alpha,但它適用於視圖,而不是可繪製的。它因爲API級別才過可用11

+2

我在''裏面使用'android:alpha =「0.6」''在選擇器內部,但它不在API級別20和更低級別上工作。請給我建議一些替代品。 –

35

我用繪製

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <solid android:color="#5000ddff" /> 
</shape> 

在這裏使用的阿爾法50,它設置不透明度水平達到一致。 希望有幫助

+0

謝謝,非常有用 – vuhung3990

+0

這很有用。將它與層次列表和您自己的可繪製項目結合使用可以爲按下狀態創建一個可繪製對象。 – Robert

+1

我沒有明白,它是如何改變drawable的alpha? – usman

41

自OP以來已經有一段時間了,但個人發現了一個解決方案,比我提出的解決方案要好得多。創建BitmapDrawable使得很容易能夠設置alpha:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/your_drawble" 
    android:alpha="77"> 
</bitmap> 

阿爾法可以是0到255。注意,它是排序HEX顏色值的α的逆的,例如70%的α之間的任何值在HEX中是B3,在BitmapDrawable中是77。

+4

請注意,這隻適用於API級別11+ –

+10

實際上,xml中的alpha是float類型,它應該是0.0到1.0之間的值。 – liuyong

+3

@liuyong這可能是真的意見,但不是''。設置「」的「alpha」的能力是當前未記錄的功能,可能或可能不起作用。這個值並不代表傳統意義上的alpha值,而是它的oposite,不透明度,這就是爲什麼 - 如果碰巧工作 - 你會得到一個完全透明的位圖,其值爲255和完全不透明度值爲0. – sfera

12

我一直在尋找同樣的事情。儘管這是四年前發佈的,但這是搜索該問題的首選帖子,所以我會在這裏回覆。

這是我的解決方案

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false"> 
     <bitmap android:alpha="@integer/not_pressed_alpha" android:src="@drawable/item"/> 
    </item> 
    <item android:state_pressed="true" android:drawable="@drawable/item" /> 
</selector> 
+0

我試過了。不爲我工作。在仿真器上測試(Nexus 5X API 23)。 –

+0

將'state_selected'改爲'state_pressed'後,它工作。 –

+0

是的,那將是正常情況,但我使用了問題中的示例代碼。 –

7

對於那些誰具有相同的問題,因爲OP,程序兼容性現在允許你設置「阿爾法」參數,因爲他在他的目標代碼希望:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- Play/Pause --> 
    <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" /> 
    <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" /> 

</selector> 

更多信息here

+2

「從API 23開始,項目可以選擇定義一個android:alpha屬性」 –

1

我的目標是讓按鈕具有選定狀態並按下不同的字母 - 但使用相同的(png)資源並影響儘可能少的文件。

我的解決方案與更改BitmapDrawable中的alpha相似 - 但它是通過選擇器實現的,因此只有一個文件受到影響。

使用位圖的色調功能,請記住,色調會着色現有的像素,所以使用白色。 例如,#80FFFFFF - 保持顏色與原始顏色相同,但將alpha減少50% 這也可用於在按下時更改圖標的顏色。

這是我繪製的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true"> 
     <bitmap 
      android:src="@drawable/ic_camera" 
      android:tint="#80FFFFFF"> 
     </bitmap> 
    </item> 
    <item android:state_pressed="true"> 
     <bitmap 
      android:src="@drawable/ic_camera" 
      android:tint="#80FFFFFF"> 
     </bitmap> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/ic_camera"> 
     </bitmap> 
    </item> 
</selector> 
相關問題