在Android中,每当我点击一个按钮(即一个ImageButton)时,我想通过改变按钮的颜色(可能反转颜色或变暗等)来给用户反馈。此时,我不想更改为新按钮或任何内容,只是想更改状态以反映点击。
我意识到我可以添加一个新的drawable,所以每个按钮将有2个状态(点击后,我会改为第二个状态)。
那是(伪代码):
onClick {
ImageButton.setDrawable(R.drawable.myclickedbutton)
}
有没有更好的方法来做到这一点(我相信iOS会在你点击时与你一起玩ImageColors,这就是我在Android中想要的),或者我认为唯一的可能性是什么?
我觉得我错过了这个概念的主要内容。
先谢谢。
修改:如果它有所不同,我的应用会以最低目标2.2运行。
编辑2 :为了澄清,我正在使用已经拥有自定义可绘制资源的图像按钮。这就是我想操作onClick。
编辑3 :我认为我在这里不够清楚。我知道如何使用两个drawables(无论是onTouch,XML,onClick等)来改变状态。我问是否有一种方法Android(或某种方法)可以自动反转或变暗所有按钮的颜色点击(就像iOS一样,我相信)。我不是在按钮到按钮的基础上询问如何执行此操作。这可以通过每个按钮2个抽屉实现,我意识到了。
答案 0 :(得分:2)
<强> button.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#f00"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#222"/>
</shape>
</item>
<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#f1f1f1"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#222"/>
</shape>
</item>
</selector>
将此按钮应用为背景
<Button
android:background="@drawable/button"/>
并在您的类文件中执行此操作
public void onClick(View v) {
pressedButton.setPressed(true);
}
这样红色就会稳定
答案 1 :(得分:0)
您不必使用您提到的代码来切换drawable。 而是创建一个具有两种不同状态的drawable。
正如您所说,您已经拥有自定义绘图,您可以将它们用于不同的状态。
<?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/drawable1" /> <!-- for clicked state-->
<item android:drawable="@drawable/drawable2" /> <!-- for normal state-->
</selector>
将此xml作为drawable_1.xml放在drawable文件夹中,并在代码中使用此drawable
yourButton.setDrawable(R.drawable.drawable_1)
答案 2 :(得分:0)
您可以使用onTouchListener作为按钮,并根据按钮单击更改按钮的状态。
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
// here u can change the button color or image as clickable as
button.setBackgroundImage(R.drawable.image_pressed);
}
if(event.getAction()==MotionEvent.ACTION_UP)
{
// here u can change the button color or image as released as
button.setBackgroundImage(R.drawable.image_released);
}
return false;
}
});
我认为这对你有帮助..