2013-01-01 48 views
1

我有以下問題。我在Horizo​​ntalScrollView中放置了30多張圖片。我通過在Horizo​​ntalScrollView中重寫此方法正確檢測onScroll()。問題是我只需要加載用戶所在的圖像,或者下載/存儲內容過多等。所以如果用戶現在快速滾動,它將開始下載從滾動開始到滾動結束的所有內容。這可能是一百張圖片,但在滾動結束時,他們只能說4或5張圖片。如何檢測滾動停止?並用它來啓動下載?Horizo​​ntalScrollView是否存在onScrollStop()事件?

編輯:對於慢速滾動,它工作完美,但快速滾動是問題。如果滾動速度很慢,那麼行爲是完美的。

編輯:我正在做的是更新onScroll中附近的任何圖像,但onScroll似乎被調用很多次,並且很難確定圖像是否應該從onScroll中更新。例如x = 50,xPrev = 49,xPrev = 50,x = 51等真正爲每個像素變化onScroll被調用。

感謝

回答

1

你的圖像在水平方向上移動, 你需要做的是找到運動圖像的速度,並在此基礎上在onScrollChanged方法加載圖像或跳過它們, 得到當前的時間將它保存到一個變量並且發現與舊時間的差異,如果距離即水平x1和x2的差異超過某個水平,即屏幕寬度(實驗它),則計算速度,如果速度低於一定水平加載圖像或以其他方式忽略,則始終加載怠速時的圖像,即速度爲零時的圖像。

+0

我覺得這個解決方案稍好一些。基於時間和速度來做這件事有一些好處,但我認爲這樣會更好一些。 – user1847544

0

找不到反正檢測滾動,但使用CountDownTimer似乎工作的結束:

我還需要重寫Horizo​​ntalScrollView添加回調IHorizo​​ntalScrollListener被稱爲內部Horizo​​ntalScrollView的onScrollView。 viewGroupContainer是ImageViews的容器LinearLayout。滾動視圖只能直接包含一個ViewGroup,因此我將所有圖像添加到視圖組中。 CountDownTimer是在活動中維護的引用。

hzScrollView.setScrollListener(new IHorizontalScrollListener(){ 

       @Override 
       public void onScrollChanged(int l, int t, int oldl, int oldt) { 
        Log.i(TAG, "onScrollChanged to x="+l+" y="+t); 
        Log.i(TAG, "onScrollChanged from x="+oldl+ " y="+oldt); 
        if (scrollUpdateTimer == null) 
        { 
         scrollUpdateTimer = new CountDownTimer(30000, 1000){ 

          @Override 
          public void onFinish() { 

           scrollUpdateTimerRunning = false; 
          } 

          @Override 
          public void onTick(long interval) { 
           Log.d(TAG, "onTick updateImageViews"); 
           updateImageViews(hZScrollView, viewGroupContainer); 
          }}; 

        } 

        if (scrollUpdateTimerRunning == false) 
        { 
         scrollUpdateTimerRunning = true; 
         scrollUpdateTimer.start(); 

        } 

       }}); 
} 
相關問題