2

我想用两种状态创建带有图像的 ImageButton - 正常和按下。状态使用相同的图像,但在按下状态它更轻。是否可以仅使用 XML,没有两个图像?

4

4 回答 4

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>
于 2012-08-02T16:12:19.310 回答
1

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

于 2012-07-12T12:37:48.953 回答
1

这样做:在名为 selector.xml 的可绘制文件夹中创建 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"
于 2012-07-12T12:46:39.660 回答
1

您可以在按下状态时将 ColorFilter 应用于 onDraw 中的 ImageButton 图像。并在未按下时将其清除。

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();
    }
}
于 2012-07-12T15:25:53.347 回答