Android — навигация с помощью перетаскивания экрана

Мне нужно сделать перетаскивание в Android. Я добавил код для навигации по экрану перетаскивания. Что не так гладко, как Android по умолчанию. Следующий код обеспечивает навигацию перетаскиванием слева направо и справа налево, но проблема заключается в том, что когда вы нажимаете справа, а затем влево, экран также перемещается. Каков правильный способ ее достижения. Нужно ли мне работать с тем же кодом при вычислении значений X?
Ниже кода.

// On Drag Navigation
public boolean onTouch(View arg0, MotionEvent arg1) {

    // Get the action that was done on this touch event
    switch (arg1.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            // store the X value when the user's finger was pressed down
            downXValue = arg1.getX();
            break;
        }

        case MotionEvent.ACTION_UP:
        {
            // Get the X value when the user released his/her finger
            float currentX = arg1.getX();            

            // Going Backward: pushing stuff to the right
            if (downXValue < currentX)
            {
                Intent lIntent = new Intent(getApplicationContext(), previousScreen.class);
                startActivity(lIntent);
                finish();
            }

            // Going Forward: pushing stuff to the left
            if (downXValue > currentX)
            {
                Intent lIntent = new Intent(getApplicationContext(), nextScreen.class);
                startActivity(lIntent);
                finish();
            }
            break;
        }
    }
}

Пожалуйста, укажите правильный способ его достижения.

заранее спасибо


person Vinayak Bevinakatti    schedule 06.12.2010    source источник


Ответы (2)


Вы должны использовать GestureListener.

person CaseyB    schedule 06.12.2010

Вы, вероятно, не хотите использовать для этого отдельные действия. Этот шаблон используется для навигации внутри одного и того же действия.

Есть два или три состояния, которые следует учитывать, в зависимости от того, как вы решите думать об этом. Первый — это состояние «перетаскивания», когда пользователь держит палец на экране и перемещается назад и вперед. Второе и третье — это то, что происходит, когда пользователь отпускает. Если скорость при отпускании ниже определенного порога (система использует минимальную скорость отбрасывания из ViewConfiguration), анимируйте ближайший экран. Если скорость выше этого порога, бросьте на следующий экран в этом направлении.

Взгляните на классы VelocityTracker, Scroller и Interpolator. Все они могут помочь вам здесь.

person adamp    schedule 06.12.2010