StartFlipping для ViewFlipper через 60 секунд после последнего прикосновения - PullRequest
3 голосов
/ 28 ноября 2011

Мое приложение содержит ViewFlipper с некоторыми изображениями.когда приложение запускается, ViewFlipper startflipping().Когда пользователь касается экрана ViewFlipper stopflipping().Я должен сделать это через 60 секунд после последнего прикосновения, чтобы ViewFlipper снова начал переворачиваться.Мой класс реализует onTouchListener, и у меня есть этот метод onTouch:

public boolean onTouch(View arg0, MotionEvent arg1) {


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

            downXValue = arg1.getX();
            break;
        }

        case MotionEvent.ACTION_UP: {

            currentX = arg1.getX();


            if (downXValue < currentX) {
                // Set the animation
                vf.stopFlipping();
                vf.setOutAnimation(AnimationUtils.loadAnimation(this,
                        R.anim.push_right_out));
                vf.setInAnimation(AnimationUtils.loadAnimation(this,
                        R.anim.push_right_in));
                // Flip!
                vf.showPrevious();
            }


            if (downXValue > currentX) {
                // Set the animation
                vf.stopFlipping();
                vf.setOutAnimation(AnimationUtils.loadAnimation(this,
                        R.anim.push_left_out));
                vf.setInAnimation(AnimationUtils.loadAnimation(this,
                        R.anim.push_left_in));
                // Flip!
                vf.showNext();
            }

            if (downXValue == currentX) {
                final int idImage = arg0.getId();

                vf.stopFlipping();
                System.out.println("id" + idImage);
                System.out.println("last touch "+getTimeOfLastEvent());

            }
            break;
        }
        }

        // if you return false, these actions will not be recorded
        return true;
    }

, и я нашел этот метод для нахождения времени последнего касания:

static long timeLastEvent=0;
public long getTimeOfLastEvent() {

        long duration = System.currentTimeMillis() - timeLastEvent;
        timeLastEvent = System.currentTimeMillis();
        return duration;
    }

Мой вопрос: куда мне звонить getTimeOfLastEvent()?Если я надену его на onTouch(), я никогда не поймаю момент, когда getTimeOfLastEvent == 60000, верно?

1 Ответ

5 голосов
/ 28 ноября 2011

Что вам нужно сделать, это создать Handler (должна быть переменной экземпляра вашего Activity и должна быть инициализирована во время onCreate):

Handler myHandler = new Handler();

Также вам потребуется Runnable, который может начать переворачивание снова (также должен быть объявлен в вашем Activity):

private Runnable flipController = new Runnable() {
  @Override
  public void run() {
    vf.startFlipping();
  }
};

Затем в вашем onClick вы просто публикуете Runnable на Handler, но с задержкой на 60 секунд:

myHandler.postDelayed( flipController, 60000 );

Запись с задержкой означает: «Запустите этот код за 60 секунд».

...