Android - OnTouch Do Work - PullRequest
       23

Android - OnTouch Do Work

2 голосов
/ 28 марта 2011

У меня есть некоторый код, который очень близко приблизил меня к тому, чего я пытаюсь достичь. Но есть несколько вопросов. Я хочу, чтобы при нажатии и удержании кнопки она постоянно вызывала метод AdvanceLog (). Проблема в том, что событие движения ACTION_DOWN не продолжает вызываться. Что происходит, когда вы нажимаете и удерживаете, первое движение - ACTION_DOWN, а каждое движение после этого, все еще удерживая нажатым, - ACTION_MOVE. Это вызывает некоторые проблемы, так как я НЕ ДЕЙСТВИТЕЛЬНО ищу движение, больше всего лишь повторяющее действие вниз. Есть предложения?

advanceButton.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) 
            {
                int counter=0;
                if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE)
                {
                    fwdTouchCounter++;
                    AdvanceLog(true, true);
                    try 
                    {
                        if(fwdTouchCounter>5)                           
                            Thread.sleep(30);
                        else
                            Thread.sleep(800);
                    } 
                    catch (InterruptedException e) 
                    {

                        e.printStackTrace();
                    }
                }
                else if(event.getAction()==MotionEvent.ACTION_UP)
                    fwdTouchCounter=0;

                return false;

            }
        });

1 Ответ

4 голосов
/ 28 марта 2011

В вашем событии ACTION_DOWN touch запускается поток, который вызывает локальный метод.Внутри этого метода постоянно читайте переменную класса (boolean является самым простым), и если эта переменная, давайте назовем ее m_advanceLog, имеет значение true, продолжайте обрабатывать (я предполагаю, что продвигать ваш журнал)В вашем событии ACTION_UP touch установите m_advanceLog на false, что должно остановить ваш цикл и позволить потоку выйти.

Имейте в виду, что это только хорошая идея, если нет изменений пользовательского интерфейса, в противном случае требуется дополнительная работа из-за взаимодействия потоков.

...