0

アニメーションと一緒にhorizo​​ntalscrollViewを使用して、一連の画像をスライドショーとして移動しています。次のコードを使用して、画像を右から左に移動できます。

 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);

}

スライドショーとして画像を右から左に移動したいと思います。正しい式/ロジックが見つかりません。親切に私を助けてください。:(

4

1 に答える 1

2

タイマーを開始する前に、次のように設定します。

scrollPos= scrollMax;

次に、このmoveScrollView関数を使用します。

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

horizo​​ntalScrollviewコンテンツの幅を計算するには:

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();

        }
    });     
}
于 2012-03-08T09:02:23.007 に答える