2011-11-18 23 views
34

Dễ như chính nó. Tôi muốn thực hiện một nút alpha, trong đó sẽ có một lựa chọn drawable theo cách này:Có cách nào để đặt Alpha có thể vẽ bằng XML không?

<?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> 

tôi sẽ muốn làm một cái gì đó như thế này:

<?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> 

Cảm ơn tất cả.

+0

tôi vẫn đang cố gắng để con số này ra là tốt. Bất kỳ may mắn? – lostintranslation

Trả lời

7

Tôi không nghĩ có cách nào để làm điều đó. Có một thuộc tính android:alpha, nhưng nó áp dụng cho các chế độ xem chứ không phải đối tượng có thể kéo. Nó chỉ có sẵn từ mức API 11.

+2

Tôi đang sử dụng 'android: alpha =" 0.6 "' trong '' bộ chọn trong, nhưng không hoạt động ở cấp API 20 trở xuống. Hãy gợi ý cho tôi một số lựa chọn thay thế. –

35

tôi đã đạt được cùng sử dụng một drawable

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

Trên đây sử dụng alpha 50, thiết lập mức độ mờ đục. Hy vọng rằng sẽ giúp

+0

cảm ơn bạn, rất hữu ích – vuhung3990

+0

Điều này rất hữu ích. Sử dụng điều này kết hợp với một danh sách lớp và mục có thể kéo của riêng bạn có thể tạo một bản vẽ cho trạng thái được nhấn. – Robert

+1

tôi đã không nhận được nó, làm thế nào là nó gona thay đổi alpha của một drawable? – usman

0

tôi nghĩ bạn có thể tạo đối tượng có thể vẽ của riêng mình để tham số này làm tham số. Tôi chưa bao giờ làm một điều như vậy.

kiểm tra liên kết này:

How to set alpha value for drawable in a StateListDrawable?

nếu đó là không thể, bạn luôn có thể làm điều đó trong mã ...

đây là 2 liên kết tôi đã tìm thấy về nó, trong trường hợp bạn muốn sử dụng bitmap thay vì:

41

Đã lâu rồi kể từ khi OP, nhưng cá nhân tìm thấy giải pháp hiệu quả hơn rất nhiều cho tôi so với câu trả lời được đề xuất. Tạo một BitmapDrawable làm là dễ dàng có thể thiết lập các 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> 

Alpha có thể được bất kỳ giá trị từ 0 đến 255. Lưu ý rằng nó là loại nghịch đảo của alpha HEX giá trị màu sắc, như ví dụ 70% alpha sẽ là B3 trong HEX và 77 trong BitmapDrawable.

+4

Lưu ý rằng điều này sẽ chỉ hoạt động đối với các cấp API 11+ –

+10

Thực tế, alpha trong xml là kiểu float, nó phải có giá trị từ 0.0 đến 1.0. – liuyong

+3

@liuyong Điều đó có thể đúng đối với các chế độ xem, nhưng không đúng đối với ''. Khả năng đặt "alpha" của một '' là một tính năng hiện không có giấy tờ có thể có hoặc không hoạt động. Giá trị cũng không thực sự đại diện cho giá trị alpha theo nghĩa truyền thống mà đúng hơn là opacity, độ mờ đục, đó là lý do tại sao - nếu nó hoạt động - bạn sẽ có bitmap hoàn toàn trong suốt với giá trị 255 và độ mờ đầy đủ với giá trị 0. – sfera

12

Tôi đã tìm kiếm điều tương tự. Mặc dù điều này được đăng hơn bốn năm trước, đây là bài đăng hàng đầu khi googling vấn đề, vì vậy tôi sẽ trả lời ở đây.

Đây là giải pháp của tôi

<?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

Tôi đã thử điều này. Không làm việc cho tôi. Thử nghiệm trên trình giả lập (API 5X của Nexus 5). –

+0

Nó hoạt động sau khi thay đổi 'state_selected' thành' state_pressed'. –

+0

Có, đó sẽ là trường hợp bình thường, nhưng tôi đã sử dụng mã ví dụ từ câu hỏi. –

7

Đối với những người có cùng một vấn đề như OP, AppCompat bây giờ cho phép bạn thiết lập 'alpha' tham số, như ông mong muốn trong mã mục tiêu của mình:

<?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> 

Thông tin thêm here.

+2

"Bắt đầu với API 23, các mục có thể tùy ý xác định thuộc tính android: alpha" –

1

Mục tiêu của tôi là tạo nút có trạng thái được chọn và được nhấn ở mức alpha khác - nhưng sử dụng cùng một nguồn (png) và ảnh hưởng đến ít tệp nhất có thể.

Giải pháp của tôi tương tự như thay đổi alpha trong một BitmapDrawable - nhưng nó thực hiện nó từ bộ chọn để chỉ có một tệp bị ảnh hưởng.

Sử dụng chức năng màu của Bitmap, hãy nhớ rằng màu sẽ tô màu các pixel hiện có để sử dụng màu trắng. Ví dụ: # 80FFFFFF - để giữ màu như bản gốc nhưng giảm alpha 50% Điều này cũng có thể được sử dụng để thay đổi màu của biểu tượng khi được nhấn.

Đây là drawable tập tin XML của tôi:

<?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> 
Các vấn đề liên quan