Сделать так, чтобы OnTouchListener постоянно обновлялся

У меня есть приложение для Android, вокруг которого я хочу рисовать круги.

Я использовал OnTouchListener.

Проблема в том, что когда пользователи «удерживают» круг на месте, действие не обновляется.

Как я могу узнать, включен ли палец пользователя, когда он не двигает его, с помощью OnTouchListener


person aclowkay    schedule 06.01.2013    source источник


Ответы (3)


Вам нужно будет проверить, какое событие вызывается onTouchEvent.

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float eventX = event.getX();
        float eventY = event.getY();

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //Do Nothing
            return true;
        case MotionEvent.ACTION_MOVE:
            //Do Something
            path.lineTo(eventX, eventY);
            break;
        case MotionEvent.ACTION_UP:
            //Do Nothing
            break;
        default:
            return false;
        }

        // Schedules a repaint.
        invalidate();
        return true;
    }

Дополнительную информацию о MotionEvents можно найти здесь.

person ObAt    schedule 06.01.2013
comment
Только MotionEvent.ACTION_MOVE, не используйте ACTION_DOWN и ACTION_UP - person ObAt; 06.01.2013

Вы можете узнать это, используя

MotionEvents:

Подробнее читайте здесь: MotionEvents

ACTION_DOWN is for the first finger that touches the screen. This starts the gesture. The pointer data for this finger is always at index 0 in the MotionEvent.
ACTION_POINTER_DOWN is for extra fingers that enter the screen beyond the first. The pointer data for this finger is at the index returned by getActionIndex().
ACTION_POINTER_UP is sent when a finger leaves the screen but at least one finger is still touching it. The last data sample about the finger that went up is at the index returned by getActionIndex().
ACTION_UP is sent when the last finger leaves the screen. The last data sample about the finger that went up is at index 0. This ends the gesture.
ACTION_CANCEL means the entire gesture was aborted for some reason. This ends the gesture.

вот хороший ответ, чтобы прочитать StackOverFlow

person Ahmed Ekri    schedule 06.01.2013
comment
Я думаю, что это ACTION_MOVE - person Ahmed Ekri; 06.01.2013

Отфильтровать касания по типу:

boolean onScreen = false;

@Override
public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX(); //X coord of the touch
    float eventY = event.getY(); //Y coord of the touch

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        // User has touched the screen
        onScreen = true;
        return true;
    case MotionEvent.ACTION_MOVE:
        // Finger is being dragged on the screen
        onScreen = true; //Not required, just for clarity purposes.
        break;
    case MotionEvent.ACTION_UP:
        // User has lifter finger
        onScreen = false;
        break;
    default:
        return false;
    }

    if(onScreen) {
        //Finger is on the screen
    }
    return true;
}
person Raghav Sood    schedule 06.01.2013