0

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

それで問題ないはずですが、クリック音が2回聞こえます(正確なタイミングを判断できない場合があります)

4

1 に答える 1

1

v.performClick();ビューにもOnClikListener: From GrepCodeがある場合、期待される動作 du ofです

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    }
于 2014-11-27T18:37:54.193 に答える