我正在尝试实现一个在点击和长点击时临时改变背景的“按钮”。我实现了一个"drawable/selector":
<?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/key_pressed" />
<item
android:drawable="@drawable/key_unpressed" />
</selector>我还捕获了long-click事件,以将背景更改为其他内容:
@Override
public boolean onLongClick(View view) {
view.setBackground(getDrawable(R.drawable.key_long_pressed));
return true;
}这样做会使背景保持不变,并且不会恢复。如果我注释掉"setBackground()",释放按钮就起作用了。
想法?
我还是想在长点击的时候改变背景。
发布于 2020-08-27 03:51:20
删除此代码
@Override
public boolean onLongClick(View view) {
view.setBackground(getDrawable(R.drawable.key_long_pressed));
return true;
}并将此链接放到XML上的按钮上
android:background="@drawable/key_long_pressed"发布于 2020-08-27 04:30:07
如果我正确理解了您的意图,那么您希望在用户按下按钮后更改背景,并在用户释放按钮后将其更改回正常状态。要解决此问题,您有两个选项(IMHO):
选项1(简单、快速):
添加使用标准Android机制的涟漪效果。请参阅此问题的答案:Add ripple effect to my button with button background color?
选项2(开销更大,耗时更长,需要编码):
当用户释放按钮时,Android会调用onLongClick(),从而在长点击的末尾。
长点击定义为运动事件ACTION_DOWN和ACTION_UP之间的时间(可配置),从而按下按钮和释放按钮。因此,你的函数会在ACTION_UP上被调用,并且不会第二次被调用(Android不会在ACTION_DOWN上调用该函数),因此背景颜色不会恢复。
如果你想改变背景,那么你需要在你的代码中实现和设置一个GestureDetector并处理ACTION_DOWN和ACTION_UP。您可以使用GestureDetector.SimpleOnGestureListener并仅覆盖代码需要的那些运动事件。
在GestureDetector.SimpleOnGestureListener.onDown()中,你的代码设置背景,在GestureDetector.SimpleOnGestureListener.onLongPress()中,你的代码还原背景颜色。请注意,此背景更改也会出现在所有其他按钮操作上,因为每个按钮操作都以onDown开头。对于其他操作,您也需要恢复为正常颜色。
https://stackoverflow.com/questions/63604179
复制相似问题