以像素为单位手动滚动列表视图(通过smoothScrollByOffset)

时间:2014-04-18 10:18:54

标签: android listview android-listview

我想当用户滚动列表视图1时,列表视图2也像列表视图1一样滚动(完全在像素中)。
我试图通过smoothScrollByOffset(偏移)滚动listview 2,但它滚动的次数超过listview 1.
我不知道为什么? smoothScrollByOffset(偏移)发生了什么,或者我错过了什么?

进一步资料:
用于滚动listview 2的代码(在listview 1的onScroll回调中):

    int previsous = 0;
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        //get current position in pixel of listview 1 
        View c = lv1.getChildAt(0);
        int scrolly = -c.getTop() + lv1.getFirstVisiblePosition() * c.getHeight();
        //Difference in pixel with the last scroll
        int delta = scrolly - previsous;
        Log.d("scroll", "listview 1 has scrolled: " + 
                scrolly + "| Difference with the last " + delta);

        //scroll listview 2 by delta
        lv2.smoothScrollByOffset(delta);
        previsous = scrolly;
    }

诊断的屏幕截图:
enter image description here

2 个答案:

答案 0 :(得分:0)

尝试使用smoothScrollToPosition (int position)代替smoothScrollByOffset (int offset),我希望这会对您有所帮助,让我知道发生了什么。

答案 1 :(得分:0)

您使用的是错误的方法。 smoothScrollByOffset()不接受像素,但接受位置数。使用smoothScrollBy(int distance, int duration)