选择器反应缓慢 - 有时在开始下一次活动之前根本不会开火

时间:2011-05-26 17:48:19

标签: android

我定义了这个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)事件慢。

我能做些什么来确保选择器不是“滞后”吗?

3 个答案:

答案 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" 
    />