1

Мне нужно сделать прокрутку автоматически.Android HorizontalScrollView Повторный автоматический прокрутка в цикле

Автоматически, я имею в виду он должен:

  1. Плавная прокрутка автоматически слева направо
  2. После правого края достигнута, гладкая прокрутка назад, т.е. справа налево.
  3. Повтор 1 & 2 бесконечно.

Я пробовал следующую реализацию, которая, похоже, не полностью работает. (вид прокручивается от L до R, но не в состоянии прокрутить из R в L)

Timer timer = new Timer("horizontalScrollViewTimer"); 
timer.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       if (horizontalScrollView.canScrollHorizontally(View.FOCUS_RIGHT)) { 
        horizontalScrollView.smoothScrollBy(5, 0); 
       } else { 
        while (horizontalScrollView.canScrollHorizontally(View.FOCUS_LEFT)) { 
         horizontalScrollView.smoothScrollBy(-5, 0); 
         if (!horizontalScrollView.canScrollHorizontally(View.FOCUS_LEFT)) { 
          break; 
         } 
        } 
       } 

      } 
     }); 
    } 
}, 3000, 50); 

Любая помощь будет оценена. ТИА.

ответ

0

изменить и попробовать это ....

private boolean scrollingLeft = false; 

.... 

Timer timer = new Timer("horizontalScrollViewTimer"); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        if (scrollingLeft) { 
         if (horizontalScrollView.getScrollX() == 0) { 
          horizontalScrollView.smoothScrollBy(5, 0); 
          scrollingLeft = false; 
         } else { 
          horizontalScrollView.smoothScrollBy(-5, 0); 
         } 
        } else { 
         if (horizontalScrollView.canScrollHorizontally(View.FOCUS_RIGHT)) { 
          horizontalScrollView.smoothScrollBy(5, 0); 
         } else { 
          horizontalScrollView.smoothScrollBy(-5, 0); 
          scrollingLeft = true; 
         } 
        } 
       } 
      }); 
     } 
    }, 3000, 50);