Android обнаруживает сопротивление

Я играл с движением событий и перетаскиванием (так что я не убираю палец с экрана - это не бросок). Проблема в том, что он обнаруживает только второе, третье, четвертое и т. Д. Перетаскивание, перемещающееся вниз или вверх, когда мой палец проходит мимо точки, где начинается и заканчивается перетаскивание вверх или вниз.

Смотрите код ниже. Количество равно 2, когда я тяну вверх и 1, когда я тяну вниз. Тем не менее, он считается только тогда, когда, например, я двигаю пальцем вверх (счет 2), а затем снова за точку, когда я начал двигаться вверх (которая будет считаться 1), а не до того, что будет равно 2, и это продолжается, когда я двигаюсь назад, значение 2 считается только тогда, когда я перехожу точку, когда я сменил направление, чтобы вернуться вниз. Но почему он не распознает это как сопротивление перед этими точками, потому что любое движение в этих направлениях должно быть сопротивлением. Как мне решить это?

Вот мой простой код для проверки:

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:

        oldX = (int) event.getRawX();
        oldY = (int) event.getRawY();


        break;

    case MotionEvent.ACTION_MOVE:

        posY = (int) event.getRawY();
        posX = (int) event.getRawX();


        diffPosY = posY - oldY;
        diffPosX = posX - oldX;

       if (diffPosY > 0){//down

            count  = 1;

        }
        else//up
        {   
            count = 2;

        }

        break;

1 ответ

Решение

Если я понимаю, что вы пытаетесь сделать правильно, я думаю, вам нужно обновить oldX а также oldY в вашем case MotionEvent.ACTION_MOVE:после того, как вы используете его для установки diffPosY а также diffPosX потому что вы в настоящее время только настройки oldX а также oldY когда начинается касание. Итак, после того, как вы установили diffPosY а также diffPosX, добавлять:

oldX = posX;
oldY = posY;

ОБНОВИТЬ

Поскольку события движения обрабатываются часто, вы, вероятно, захотите ввести некоторое касание, чтобы учесть тот факт, что, когда вы кладете палец на экран, вы можете немного переместить его вниз, прежде чем подняться вверх, не осознавая этого, и если вы проводите медленно Вы можете случайно слегка провести пальцем в направлении, противоположном тому, как вы думаете. Это похоже на то, что происходит в том, что вы видели в своем комментарии ниже. Следующий код должен помочь это исправить, но он будет немного медленнее реагировать на изменения направления:

// Get the distance in pixels that a touch can move before we
// decide it's a drag rather than just a touch. This also prevents
// a slight movement in a different direction to the direction
// the user intended to move being considered a drag in that direction.
// Note that the touchSlop varies on each device because of different
// pixel densities.
ViewConfiguration vc = ViewConfiguration.get(context);
int touchSlop = vc.getScaledTouchSlop();

// So we can detect changes of direction. We need to
// keep moving oldY as we use that as the reference to see if we
// are dragging up or down.
if (posY - oldY > touchSlop) {
    // The drag has moved far enough up the Y axis for us to
    // decide it's a drag, so set oldY to a new position just below
    // the current drag position. By setting oldY just below the
    // current drag position we make sure that if while dragging the
    // user stops their drag and accidentally moves down just by a
    // pixel or two (which is easily done even when the user thinks
    // their finger isn't moving), we don't count it as a change of
    // direction, so we use half the touchSlop figure as a small
    // buffer to allow a small movement down before we consider it
    // a change of direction.
    oldY = posY - (touchSlop / 2);
} else if (posY - oldY < -touchSlop) {
    // The drag has moved far enough down the Y axis for us to
    // decide it's a drag, so set oldY to a new position just above
    // the current drag position. This time, we set oldY just above the
    // current drag position.
    oldY = posY + (touchSlop / 2);
}
Другие вопросы по тегам