使用颜色状态列表着色ImageView图像资源(png)

时间:2017-09-21 15:57:55

标签: android performance android-layout xamarin.android

在使用颜色状态列表ImageView按钮进行着色时,我没有像使用&#34; 可绘制选择器<时那样获得相同的行为/强>&#34; (指向预渲染的替代图像)。

当点击按钮时,没有任何颜色变化,当按住一两秒时,确实会发生颜色变化,但有时只会出现在图标的下半部分。

注意:我试图让按钮改变颜色,而不是整个背景,这样它在触摸时就会发光(无需在编辑器中对其进行预先着色) )。

注意:我意识到这些图标已经过时了,而不是来自新的材料集,但我暂时无法使用它们。

资源/抽拉/ ic_menu_my_calendar.png

ic_menu_my_calendar

资源/颜色/ 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发现一些很酷的效果用于预渲染方法

enter image description here

完成了分层

enter image description here

0 个答案:

没有答案