似乎是完成動畫所需的持續時間問題,smoothScrollBy(int distance,int duration)存在同樣的問題,粗略瀏覽一下,smoothScrollToPosition()是一個用於smoothScrollBy() smoothScrollBy()反過來僞裝一個「扔手勢」,就好像用戶已經做出了動作一樣。
smoothScrollBy真的只是發佈了可以繼續自我更新的投擲runnable,直到持續時間運行這意味着它只是根據之前決定移動的偏移量來計算所需的滾動偏移量,因此如果在達到目標偏移量之前持續時間耗盡,它會停止在最後計算的偏移量處(而不是所有突然跳躍到目標偏移量,這是perhap因爲它不會動畫)。
Android傢伙的困難在於確定每次run()調用移動多少以達到所需的偏移量,因爲ListView單元格(兒童)的高度完全是動態的,所以他們不能只做簡單的距離計算因爲他們不知道孩子的身高。同樣的道理,Android滾動條的大小可能會隨着滾動而波動,因此必須根據當前所看到的大小猜測它的大小。
反正不幫你解決這個問題,而有些會覺得很有趣:)
如果你知道你有靜態的單元格高度然而,你可以寫你自己的方法來計算距離和時間傳遞自己smoothScrollBy(),並有一個靜態的時間移動X距離。如果你不這樣做,它將只能使用發佈的解決方案大事件,因爲1000毫秒的SCROLL_DURATION高,所以確實可行。您可以使用ICS版本並更改此屬性,而不是使用不是根本原因的2.2版本。
你也可以使用你自己的自定義算法來調整這些可運行的程序,調整它們不應該太困難。
我有同樣的問題。 http://code.google.com/p/android/issues/detail?id=37278 – bigstones
我發佈了一個解決方法。 – bigstones
這似乎是固定在軟糖。 –