我有button_focused
、button_pressed
和button_normal
图像。当我按下按钮时,将button_pressed
显示图像并开始与按下按钮相关的操作。
当我停止按下按钮时,动作继续,但按钮返回到button_normal
正在显示的图像。
如何设置button_pressed
在整个操作期间显示的按钮图像然后重置为button_normal
图像?
感谢您的时间
我使用了类似的功能
void setHighlighted(boolean highlight) {
button.setBackgroundResource( highlight
? R.drawable.bbg_pressed
: R.drawable.button_background);
}
其中 button_background 是定义在以下位置的选择器
button_backgroung.xml
:
<?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/bbg_pressed"></item>
<item android:state_focused="true" android:drawable="@drawable/bbg_selected"></item>
<item android:drawable="@drawable/bbg_normal"></item>
</selector>
也就是说,这段代码不会干扰Android框架使用的pressed状态;相反,它会更改背景,使按钮看起来被按下。
如果您只需要一个两种状态的按钮,为了让它更清楚一点:
你不需要你自己的button.xml
. 您可以使用正常的Android。
如果您单击按钮,则该button.setPressed(true)
按钮将不起作用,因为一旦您松开按钮,Android 将重置它。尝试先设置另一个按钮setPressed
状态,看看效果。
这意味着,要在同一个按钮上使用它,必须将其设置为延迟。这是一个工作示例。当然,上面提到的改变背景的方法(通过 long id 18..)也有效。
private final Handler mHandler = new Handler();
rootView.findViewById(R.id.yourButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean pressed = false;
if (v.getTag() instanceof Boolean)
pressed = (boolean) v.getTag();
final boolean newPressed = !pressed;
// setTag to store state
v.setTag(newPressed);
final View vRun = v;
Runnable run = new Runnable() {
@Override
public void run() {
vRun.setPressed(newPressed);
}
};
mHandler.post(run);
// mHandler.postDelayed(run, 5);
}
});
我用了
NAME_OF_BUTTON.setImageResource(0xvalueofbutton_pressed image listed in R.java);
然后当动作终止时,我复制了代码并插入了button_normal
.
我以前做过不同的事情,我找不到我的备份或我的代码的硬拷贝。
再次感谢您的回复。
如果您在其 onClick 方法中手动更改按钮中的图像,则当操作完成时,它可以为该按钮设置正常图像。如果动作非常快,则更改将无法正确显示 - 它可能还需要延迟代码。
利用(buttonName).setPressed(true)
并确保您为可绘制对象保留了适当的 xml 文件,该文件定义了用于按下、聚焦等状态的可绘制对象:
只需添加我的 2 美分作为另一种选择。您可以使用 setSelected(true),而不是 button.setPressed,一旦用户松开按钮,它就会从选择器中丢失状态。只需确保在完成操作后返回 setSelected(false) 即可。
btn.setOnClickListener( view -> {
view.setSelected(true);
});
并将可绘制选择器添加为按钮的背景:
<item android:drawable="@drawable/btn_selected" android:state_selected="true"></item>
老问题,但我所做的似乎比上述所有内容都简单。在按钮的点击中:
thisButton
.getBackground()
.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
我的按钮正在使用可绘制资源(不确定这是否重要),当用户单击一个时,我设置了我想要的颜色过滤器,它与我用于“按下”状态的颜色相同,因此看起来它保持按下状态。
要清除它,请使用:
thisButton.getBackground().clearColorFilter();