在使用颜色状态列表对ImageView
按钮进行着色时,我没有像使用&#34; 可绘制选择器<时那样获得相同的行为/强>&#34; (指向预渲染的替代图像)。
当点击按钮时,没有任何颜色变化,当按住一两秒时,确实会发生颜色变化,但有时只会出现在图标的下半部分。
注意:我试图让按钮改变颜色,而不是整个背景,这样它在触摸时就会发光(无需在编辑器中对其进行预先着色) )。
注意:我意识到这些图标已经过时了,而不是来自新的材料集,但我暂时无法使用它们。
资源/抽拉/ ic_menu_my_calendar.png
资源/颜色/ calendar_btn_color_state_list.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#A0AA3355"/>
<item android:state_selected="true" android:color="#A0AA3355"/>
<item android:state_checked="true" android:color="#A0AA3355"/>
<item android:color="#FFAAAAAA"/>
</selector>
使用
_calendarButton = new ImageButton(this.Context);
_calendarButton.SetImageResource(Resource.Drawable.ic_menu_my_calendar);
_calendarButton.SetBackgroundColor(Color.Transparent);
var csl = ColorStateList.CreateFromXml(Resources, Resources.GetXml(Resource.Color.calendar_btn_color_state_list));
// all options give the same unexpected behavior
_calendarButton.Drawable.SetTintList(csl); // option 1
_calendarButton.Background.SetTintList(csl); // option 2
_calendarButton.ImageTintList = csl; // option 3
// tried a bunch of modes, didn't help
//_calendarButton.ImageTintMode = PorterDuff.Mode.SrcIn;
以下列出了我想要实现的行为。
资源/抽拉/ calendar_btn_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/ic_menu_my_calendar_pressed"/>
<item android:drawable="@drawable/ic_menu_my_calendar"/>
</selector>
使用
_calendarButton = new ImageButton(this.Context);
_calendarButton.SetImageResource(Resource.Drawable.calendar_btn_selector);
_calendarButton.SetBackgroundColor(Color.Transparent);
更新
使用GIMP发现一些很酷的效果用于预渲染方法
完成了分层