2012-07-12 18 views

回答

2

我发现,我感到满意的解决方案:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/my_image" android:state_pressed="false"/> 
    <item android:drawable="@drawable/my_image_pressed" android:state_pressed="true"/> 
</selector> 

在按钮的背景,我把这个绘制,其中从资源my_image图像和my_image_pressed下一个绘制:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <bitmap android:src="@drawable/my_image" /> 
    </item> 
    <item> 
     <color android:color="#5FEC" /> 
    </item> 
</layer-list> 
+0

不是一个理想的解决方案。这将取决于您的图像的大小。如果它是圆角的,那么这个解决方案看起来很糟糕。 – 2012-10-11 19:17:13

+0

感谢哥们我得到了关于按钮选择器上的单个图像设置的这个解决方案:) – 2014-08-25 11:47:48

1

但为什么你不想使用两个不同的图像?

+0

如果我有许多按钮然后图像将有很大的重量。 – anber 2012-07-12 12:40:57

+0

您不能在按钮中使用图像和颜色的组合。 – Chakravyooh 2012-07-12 12:45:17

+0

您可以通过制作9-Patch图像来缩小按钮图像的文件大小。此外,你真的应该有5个按钮状态(正常,集中,按下,disabled_focused,和禁用),所以你可以咬紧牙关,并期望拥有大量的资源。我会尽可能缩小它们,并根据您的设计限制,查看是否可以合并所需的不同按钮数量。 – Karakuri 2012-07-12 15:41:14

1

这样做:在创建文件夹绘制的XML文件名为selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/lighter_image" 
      android:state_pressed="true" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/original_image"/> 

</selector> 

在ImageButton的设定背景为这个XML:

android:background="@drawable/selector" 
+1

这将是2张图片,他为两种状态搜索只有1张图片的解决方案。虽然我没有看到任何比你的解决方案。 – banzai86 2012-07-12 12:54:58

+0

他必须创建两个图像。他无法以编程方式进行管理。在制作两张图像时出现什么问题。一个人应该考虑以任何方式解决问题 – AkashG 2012-07-12 12:56:11

+0

什么是@ drawable/lighter_image和@ drawable/original_image? – anber 2012-07-12 12:56:20

1

您可以将ColorFilter到ImageButton的在onDraw有图像当状态被按下时。当它没有按下时清除它。

filter = new PorterDuffColorFilter(0x7FFFFFFF, PorterDuff.Mode.SRC_ATOP); 

@Override 
protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    if (isPressed()) 
    { 
     getDrawable().setColorFilter(filter); 
    } 
    else 
    { 
     getDrawable().clearColorFilter(); 
    } 
} 
+0

有趣的,会尝试。 – 2012-10-11 19:17:49

相关问题