Android Перетащите и поменяйте позиции панели вкладок кнопок

Я разработал панель вкладок, используя список кнопок.

Теперь я хочу изменить расположение вкладки, как мы делаем в браузере Chrome при перетаскивании

Я придумал приведенный ниже код, с помощью которого я могу перейти сразу к следующей позиции.

Я не могу найти решение, которое, если я продолжу перетаскивать, должно снова поменяться с более чем одной позицией

Я использую переменную moveDone, чтобы ограничить касание после перемещения, но если я удаляю это, это вызывает некоторые другие проблемы.

Как улучшить это, чтобы заставить его перемещаться более чем на одну позицию в одном и том же перетаскивании или Есть ли лучший способ сделать это?

boolean moveDone;
float startXcoVar;

currentTabBtnVar.setOnTouchListener(new View.OnTouchListener()
{
    @Override
    public boolean onTouch(View view, final MotionEvent event)
    {
        case MotionEvent.ACTION_DOWN:
            moveDone = false;
            startXcoVar = event.getRawX();

        case MotionEvent.ACTION_MOVE:
            float stopXcoVar = event.getRawX();
            float diffXcoVar = stopXcoVar - startXcoVar;

            if (Math.abs(diffXcoVar) > currentTabBtnVar.getWidth())
            {
                int lastIdxVar = (int) currentTabBtnVar.getTag();
                int nextIdxVar;
                if (diffXcoVar < 0)
                {
                    nextIdxVar = lastIdxVar - 1;
                } else
                {
                    nextIdxVar = lastIdxVar + 1;
                }

                float lastXcoVar = currentTabBtnVar.getX();
                Button nextBtnIdxVar = tabBtnListVar.get(nextIdxVar);
                currentTabBtnVar.animate()
                        .setDuration(500)
                        .x(nextBtnIdxVar.getX())
                        .start();
                nextBtnIdxVar.animate()
                        .setDuration(500)
                        .x(lastXcoVar)
                        .start();
                Collections.swap(tabBtnListVar, lastIdxVar, nextIdxVar);
                currentTabBtnVar.setTag(nextIdxVar);
                nextBtnIdxVar.setTag(lastIdxVar);
                moveDone = true;
            }
            break;

        case MotionEvent.ACTION_UP:
                break;
    }
    return true;
}

0 ответов

Другие вопросы по тегам