2013-11-01 25 views
5

Bir ImageView ve bir TextView ile bir LinearLayout "kartım" var. Kullanıcı tıkladığında kartın vurgulanmasını istiyorum. Örnek için http://www.youtube.com/watch?v=Yx1l9Y7GIk8&feature=share&t=15m17s'a bakın.Kullanıcı bir dokümana dokunduğunda bir mavi üzerine gelin.

Bu, TextView için android:background="@drawable/blue_highlight" ayarlanarak kolayca yapılabilir. Aşağıda res/çekilebilir/blue_highlight.xml geçerli:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@color/selected"/> 
    <item android:state_pressed="true" android:drawable="@color/pressed"/> 
    <item android:drawable="@color/bg_window"/> 
</selector> 

Ama görüntü önünde ve arka plan görünür olmadığından bu ImageView için çalışmaz. Bir ImageView için yarı şeffaf bir renkle dokunma vurgulama efektini nasıl alabilirim?

+2

LinearLayout'unuzu FrameLayout içine koyabileceğinizi ve bunun için önalan özniteliğini ayarlayabileceğinizi düşünüyorum. – Bracadabra

cevap

12

Şaşırtıcı bir şekilde, FrameLayout bu kullanılabilir foreground öznitelik vardır. Dezavantaj, ekstra bir FrameLayout öğesi eklemeniz gerektiğidir. Uygulama basittir, bu yüzden fantezi görüntü işleme (görüntüyü biraz renklendirin, sonra vurguyu uygulayın) ve durum çizgilerini dinamik olarak oluşturmak için zamana sahip oluncaya kadar bu yeterli görünebilir.

Yani bu durumda bu olacaktır: çekilebilir @

<FrameLayout 
    android:foreground="@drawable/blue_highlight_image" 
    > 
    <ImageView ...> 
</FrameLayout> 

/blue_highlight_image örneğin @ renkli benzer yeni bir @ rengi/pressed_image değeri/preslenmiş kullanır, ancak bir alfa kanalı # 81CFEB -> # AA81CFEB.

Öneri @Vang öneri için.

+1

Varsayılan mavi renk için şunu kullanabilirsiniz: '? Android: attr/selectableItemBackground'. –

+0

Bu harika çalışıyor ve @aleb'den bahsetmişken, vurgu gibi görünmesini sağlamak için alfa% 30 kullanmıştım (hex'te% 30 alfa = 4D). – green0range

1

Doğru yoldasın. Blue_highlight.xml dosyasını çekilebildiğiniz gibi kullanmaya çalışın, bunun yerine renkleri kullanmak istediğiniz görüntüyü kullanın ve vurgulandığında görüntüye renk filtresi ekleyen ikinci bir çizge tanımlayın.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/yourdrawable_with_colorfilter"/> 
    <item android:state_pressed="true" android:drawable="@drawable/yourdrawable_with_colorfilter"/> 
    <item android:drawable="@drawable/your_drawable"/> 
</selector> 
+0

Teşekkürler. Statik görüntüler için harika çalışır. Görüntüler bir veritabanından veya indirilmişse uygulamak daha zor. – aleb

+0

Haklısınız. Ama bundan bahsetmedin. Daha dinamik olmanız için seçiciyi programlayabilirsiniz. [Burada] (http://stackoverflow.com/questions/4697528/replace-selector-images-programmatically) iyi bir örnek bulabilirsiniz (kabul edilen cevap). – Baschi

İlgili konular