Android onTouch()让声音像双击一样

时间:2014-11-27 18:36:44

标签: android onclick onclicklistener ontouchevent ontouch

我为我的布局实现了onTouch以充当按钮 除了触摸按钮时有时发出2次咔嗒声这一事实,这一切都很有效 我试过调试它,但我无法理解是什么问题。

以下是onTouch代码:

button.setOnTouchListener(new OnTouchListener() 
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        Log.d(TAG, "onTouch "+event.getAction());
        switch (event.getAction())
        {
            case MotionEvent.ACTION_HOVER_ENTER:
                v.setBackgroundResource(R.color.main_menu_buttons_bg_pressed);
                break;
            case MotionEvent.ACTION_HOVER_EXIT:
                v.setBackgroundResource(R.color.background_color);
                break;
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundResource(R.color.main_menu_buttons_bg_pressed);
                break;
            case MotionEvent.ACTION_UP:
                Log.d(TAG, "on click");
                v.performClick();
                v.setBackgroundResource(R.color.background_color);
                break;
            default:
                // empty    
        }
        return false;
    }
});

正如您所看到的,我添加了日志消息,通常会打印出来:

onTouch 0
onTouch 2
onTouch 2
onTouch 2
onTouch 2
onTouch 1
on click

所以它应该没问题,但是听到两次点击(有时,无法准确确定何时发生)

1 个答案:

答案 0 :(得分:1)

它是v.performClick();的预期行为du,当视图还有OnClikListener时:来自GrepCode

2480    public boolean More ...performClick() {
2481        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
2482
2483        if (mOnClickListener != null) {
2484            playSoundEffect(SoundEffectConstants.CLICK);
2485            mOnClickListener.onClick(this);
2486            return true;
2487        }
2488
2489        return false;
2490    }