我想用两种状态创建带有图像的 ImageButton - 正常和按下。状态使用相同的图像,但在按下状态它更轻。是否可以仅使用 XML,没有两个图像?
问问题
1547 次
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 回答