HorizontalListView實現水平滑動


  之前的項目使用了HorizontalListView,要實現滑動到最后一個條目的功能。起初以為和listview一樣直接setSelect()即可,但是並沒有什么卵用,翻看源碼發現竟然是這樣寫的:

    @Override  
    public void setSelection(int position) {  
        //TODO: implement  
    }  

  額,難怪呢....

  這咋辦,自己寫?不,我們要去找現成的輪子,一番搜索后發現如下代碼:

@Override
public void setSelection(int position) {
    int positionX = position * this.getWidth();
    int maxWidth = this.getChildCount() * this.getWidth();
    if (positionX <= 0) {
        positionX = 0;
    }
    if (positionX > maxWidth) {
        positionX = maxWidth;
    }
    scrollTo(positionX);
}            

  大概瞅了下,不太對勁。沒細想,直接復制過去開搞。結果emmm,誰貼的坑爹玩意,仔細一看心中一萬頭草泥馬奔騰而過。槽點太多,不一一吐槽。直接改起:

    @Override
    public void setSelection(int position) {
        View childAt = getChildAt(0);
        if(null == childAt){
            return;
        }
        int positionX = position * childAt.getWidth();
        int maxWidth = this.getChildCount() * childAt.getWidth();
        if (positionX <= 0) {
            positionX = 0;
        }
        if (positionX > maxWidth) {
            positionX = maxWidth;
        }
        scrollTo(positionX);
    }

  此乃正確之道,真實測試,童叟無欺,歡迎拍磚。

  又發現少量數據時是正常的,數據量比較大的時候就不正確了。還是控件太老了,考慮上新的控件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM