我有一个需要具备“按住并保持”功能的按钮图形,因此我使用了onTouchListener而不是使用onClickListener,这样应用程序可以对其做出反应。
MotionEvent.ACTION_DOWN,
和
MotionEvent.ACTION_UP
根据这两个事件触发的速度,我可以在两者之间的时间内运行“pressAndHoldHandler”。
总之,长话短说:在同一个应用程序中,我有许多“基本”按钮不需要按住功能,因此它们使用onClickListener。
所有这些按钮都已经通过自己的XML选择器文件进行了图形化自定义:
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/btn_chicken_off" />
<item
android:state_enabled="true"
android:state_pressed="true"
android:drawable="@drawable/btn_chicken_s3" />
<item
android:state_enabled="true"
android:state_focused="true"
android:drawable="@drawable/btn_chicken_s2" />
<item
android:state_enabled="true"
android:drawable="@drawable/btn_chicken_off" />
</selector>
所以问题是:上述选择器不能通过onTouchListener访问。只有onClickListener将使用其自己方法的onClick()部分拉取状态更改,因此这些“按住”按钮永远不会改变状态。对用户来说反馈非常糟糕。我目前正在通过在ACTION_DOWN和ACTION_UP的switch case内进行以下操作来强制执行以上内容:
if (action == MotionEvent.ACTION_DOWN) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_s3);
}
else
if (action == MotionEvent.ACTION_UP) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_off);
}
但这似乎是一种hack的方法,并且它缺少“聚焦但未按下”的阶段。
有人之前遇到过这个问题吗?