1

В андроиде у меня есть кнопка, которая появляется, когда пользователь прокручивается вверх и исчезает иначе. Однако также, когда он появляется, я пытаюсь снова исчезнуть через 3 секунды, если пользователь прекратил прокрутку (через 3 секунды бездействия). Я пробовал следующий код:Кнопка «Сделать» Невидимая через 3 секунды, но не делайте ее невидимой, если пользователь прокручивается

//detecting whether the user is scrolling up or down, to make the refresh button visible/invisible 
     listView.setOnTouchListener(new View.OnTouchListener() { 

      int scrollEventListSize = 5; 
      float lastY; 
      // Used to correct for occasions when user scrolls down(/up) but the onTouchListener detects it incorrectly. We will store detected up-/down-scrolls with -1/1 in this list and evaluate later which occured more often 
      List<Integer> downScrolledEventsHappened; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       float diff = 0; 
       if(event.getAction() == event.ACTION_DOWN){ 
        lastY = event.getY(); 
        downScrolledEventsHappened = new LinkedList<Integer>(); 
       } 
       else if(event.getAction() == event.ACTION_MOVE){ 
        diff = event.getY() - lastY; 
        lastY = event.getY(); 

        if(diff>0) 
         downScrolledEventsHappened.add(1); 
        else 
         downScrolledEventsHappened.add(-1); 

        //List needs to be filled with some events, will happen very quickly 
        if(downScrolledEventsHappened.size() == scrollEventListSize+1){ 
         downScrolledEventsHappened.remove(0); 
         int res=0; 
         for(int i=0; i<downScrolledEventsHappened.size(); i++){ 
          res+=downScrolledEventsHappened.get(i); 
         } 

         if (res > 0) { 
          Log.i("INFO", "Scrolled up"); 
          refreshButton.setVisibility(View.VISIBLE); 
         } 
         else { 
          Log.i("INFO", "Scrolled down"); 
          refreshButton.setVisibility(View.INVISIBLE); 
         } 
        } 
       } 
       return false; // don't interrupt the event-chain 
      } 
     }); 





//Removing refresh button when user stops scrolling up or already at the top of the list. 
listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 

     if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 

        new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 

    refreshButton.setVisibility(View.INVISIBLE); 
    } 
}, 3000); 



     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     if(firstVisibleItem == 0 && listIsAtTop()){ 
      System.out.println("List at Top....Refresh Button is disappearing..."); 
      refreshButton.setVisibility(View.INVISIBLE); 
     } 
    } 
}); 

Этот код, однако, не дает мне то, что я хочу. Это правда, что кнопка исчезает через 3 секунды бездействия пользователя, но она также делает это, пока пользователь снова прокручивается! Я имею в виду, мне нужен механизм, в котором исчезающая идея после 3 секунд должна быть отменена, когда пользователь снова прокручивается. Как мне это сделать? Спасибо.

+0

на кнопку набора событий «OnScroll» видимость для видимого и метод вызова на scrollstop для запуска потока в течение 3 секунд после таймера кнопка будет установлена ​​на невидимую – siddhesh

ответ

2

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

что-то вроде этого

myHandler.removeCallbacks(myRunnable); 

запуска обработчика таким образом

myHandler.postDelayed(myRunnable,LENGTH); 
+0

Это сработало. Благодарю. –