我定义了这个Selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- PRESSED -->
<item android:state_pressed="true"
android:drawable="@drawable/backarrow_blueshiny" />
<!-- FOCUSED -->
<item android:state_focused="true"
android:drawable="@drawable/backarrow_blackshiny" />
<!-- DEFAULT -->
<item android:drawable="@drawable/backarrow_blackshiny" />
</selector>
并且它与此按钮一起使用:
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/bottomborder_glossy">
<!-- BACK -->
<ImageButton
android:id="@+id/filter_button_back"
android:layout_width="90dip"
android:layout_height="wrap_content"
android:src="@drawable/selector_back_button"
android:background="#00000000"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
并且onTouch事件包括:
public boolean onTouch(View v, MotionEvent event)
{
final int actionPerformed = event.getAction();
final int widgetID = v.getId();
if (actionPerformed == MotionEvent.ACTION_UP)
{
switch (widgetID)
{
case R.id.filter_button_back:
{
this.finish();
break;
}
}
}
return false;
}
此按钮的作用是退出当前活动this.finish()
但是,在我的测试中,按钮并不总是切换到“backarrow_blueshiny” - 即按下非常快时。
所以问题是选择器的触发速度比onTouch(MotionEvent.ACTION_UP)事件慢。
我能做些什么来确保选择器不是“滞后”吗?
答案 0 :(得分:6)
尝试在OnTouchListener中以编程方式将视图设置为:
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
button.setPressed(true);
break;
case MotionEvent.ACTION_UP:
// optional, should work without next line
// button.setPressed(false);
break;
}
return false;
}
答案 1 :(得分:2)
我遇到了同样的问题。在模拟器中它甚至没有改变按钮颜色。它是由“onTouch”引起的。如果使用onClickListener而不是onTouchListener,它将按预期反应。
我可以看到你没有使用任何多点触控功能,所以你不要使用onClick并摆脱
if (actionPerformed == MotionEvent.ACTION_UP)
答案 2 :(得分:0)
你的意思是比典型的Android选择器行为更懒散吗?根据我的经验,按下按钮之间总会有一点延迟,并且它被选中 - 我认为这是为了避免在你想要滚动时显示触摸事件,但它总是让我感到烦恼。如果它不仅仅是典型行为,请尝试仅使用按钮,将android:background
设置为选择器,而不是将android:src
设置为选择器的ImageButton。
e.g。
<Button
android:layout_width="90dip"
android:layout_height="wrap_content"
android:background="@drawable/selector_back_button"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
/>