最近項目中碰到一個很奇怪的問題,在一個帶ListView的界面上滑動的時候,偶現ListView頂部出現一根1px的線,線的顏色跟ListView的背景色一樣。下圖是我用demo還原這個bug后截的圖,為了方便大家看清楚,把這根線變粗了。
這個界面的布局如下:
看到這個問題你覺得可能的原因會是什么?因為筆者的項目ListView支持下拉刷新,懷疑是不是因為下拉刷新后沒有回彈到位。用hierarchyviewer.bat分析后,排除這個原因。又懷疑是不是因為硬件加速導致的,禁用掉這個activity的硬件加速后問題依舊,這個原因也排除了。暫時也沒有其他懷疑的對象了,于是再次打開UI神器hierarchyviewer.bat,這次發現了一個驚天的秘密,尼瑪這個ListView居然不是原生的ListView,而是自己重寫的,打開代碼一看,僅僅只是重寫了overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)這個方法,實現如下:
項目里返回的是1,這里為了放大這根線改成了10。直覺告訴我應該是這里的問題了,把1改成maxOverScrollY后驗證,問題完美解決!果然是這貨導致的。那是不是就結束了呢?當然不是,如果你也跟筆者一樣,不了解overScrollBy是干嘛用的,建議打開源碼或者API文檔熟悉一下。這里筆者賣個關子就不介紹了。
題外話,這個問題比較特殊,是因為重寫ListView導致的,大部分讀者應該不會碰到這種問題。但碰到這種問題后應該如何去分析呢?如果你有更好的思路也可以給筆者留言,一起探討。大家如果在平時的工作中有碰到什么棘手難搞的問題也可以給筆者留言,一起探討。