Переместить горизонтальный вид прокрутки Android слева направо - PullRequest
0 голосов
/ 01 марта 2012

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

 public void getScrollMaxAmount(){
    int actualWidth = (horizontalOuterLayout.getMeasuredWidth()-512);
    scrollMax   = actualWidth;
}

public void startAutoScrolling(){
    if (scrollTimer == null) {
        scrollTimer =   new Timer();
        final Runnable Timer_Tick = new Runnable() {
            public void run() {
                moveScrollView();
            }
        };

        if(scrollerSchedule != null){
            scrollerSchedule.cancel();
            scrollerSchedule = null;
        }
        scrollerSchedule = new TimerTask(){
            @Override
            public void run(){
                runOnUiThread(Timer_Tick);
            }
        };

        scrollTimer.schedule(scrollerSchedule, 30, 30);
    }
}

public void moveScrollView(){
    scrollPos   =   (int) (horizontalScrollview.getScrollX() + 1.0);
    if(scrollPos >= scrollMax){
        scrollPos = 0;
    }
    horizontalScrollview.scrollTo(scrollPos, 0);

}

Теперь я хочу переместить изображения справа налево в виде слайд-шоу. Я не могу найти правильную формулу / логику. Пожалуйста, помогите мне. (

1 Ответ

1 голос
/ 08 марта 2012

Перед запуском таймера установите:

scrollPos= scrollMax;

Затем используйте эту функцию moveScrollView:

public void moveScrollView(){
    scrollPos   =   (int) (horizontalScrollview.getScrollX() - 1.0);
    if(scrollPos <= 0){
        scrollPos = scrollMax;
    }
    horizontalScrollview.scrollTo(scrollPos, 0);
}

Для расчета ширины содержимого горизонтальной прокрутки:

protected void onCreate(Bundle savedInstanceState) 
{
        ...

    horizontalScrollview= (HorizontalScrollView) findViewById(R.id.hsv);
    ViewTreeObserver vto = horizontalScrollview.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            horizontalScrollview.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            scrollMax= horizontalScrollview.getChildAt(0).getMeasuredWidth()-getWindowManager().getDefaultDisplay().getWidth();

        }
    });     
}
...