4

タッチイベントに応答する必要があるAndroidアプリを書いています。アプリでリストアイテムの色をカスタム色に変更したい。私は次のコードを書きましたが、MotionEvent.ACTION_DOWNセクションだけが機能しています。LogCatはそれを示してACTION_CANCELおりACTION_UP、まったく呼び出されていません。コードが機能しない理由を理解するのを手伝っていただけませんか。

これは私のコードです...

view.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_UP" );
        }
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            view.setBackgroundColor(Color.rgb(23, 128, 0));
            Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
        }
        if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
        }
        return false;
    }
});
4

1 に答える 1

19

falseメソッドから戻った場合onTouch、それ以上のイベントはリスナーに配信されません。trueの場合は、少なくとも戻る必要がありevent.getAction() == MotionEvent.ACTION_DOWNます。

以下のようにコードをリファクタリングします。

view.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_UP" );
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    view.setBackgroundColor(Color.rgb(23, 128, 0));
    Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
    return true;
}

if (event.getAction() == MotionEvent.ACTION_CANCEL) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
}
return false;
}
});
于 2012-04-17T14:14:34.417 に答える