我想创建带有图像的ImageButton,它有两种状态 - 正常和按下。状态使用相同的图像,但在按下状态下它更轻。是否可以仅使用XML,没有两个图像?
答案 0 :(得分: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>
在按钮背景上,我放置了这个drawable,其中来自资源的my_image
图片和my_image_pressed
下一个drawable:
<?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>
答案 1 :(得分:1)
但为什么你不想使用两个不同的图像?
答案 2 :(得分: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上将background设置为此xml:
android:background="@drawable/selector"
答案 3 :(得分:1)
按下状态时,可以在onDraw中将ColorFilter应用于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();
}
}