1

我实现了一个代码来使用View.scrollTo(...)和 postDelay 计时器执行 Auto Horizo​​ntalScrolling 以保持滚动继续。

开始滚动我正在使用:

private void startScrolling() {

        handler.postDelayed(new Runnable() {
            public void run() {

                counter = (int) (counter + 10);
                handler.postDelayed(this, 100);

                    viewCount++;

                    if(viewCount == MAX_CHILD) {
                        viewCount = 0;
                        resetViewPosition(0);
                    }

                    llParent.scrollTo(counter , 0);
            }
        }, 1000L);
    }

最后我删除了每一个第一个视图并再次添加它,所以它最终会出现并显示为新的孩子,使用:

private void resetViewPosition(int viewIndex) {

        View view = llParent.getChildAt(viewIndex);

        Log.v(TAG, "resetViewPosition : "+view.getId()+", "+llParent.getChildCount());
        llParent.removeViewAt(viewIndex);
        llParent.addView(view);
    }

问题:在这个过程中,最初对于某些视图它可以正常工作,但很快下一个孩子不可见。仍在添加/删除进程运行,我在 resetViewPosition(..) 中正确获取索引 ID。它只是子视图没有绘制。

请建议我如何在父视图滚动时添加和显示视图?

4

1 回答 1

1

正如所讨论的那样替换:

private void resetViewPosition(int viewIndex) {

        View view = llParent.getChildAt(viewIndex);

        Log.v(TAG, "resetViewPosition : "+view.getId()+", "+llParent.getChildCount());
        llParent.removeViewAt(viewIndex);
        llParent.addView(view);
    }

有了这个:

private void resetViewPosition(int viewIndex) {

  View view = llParent.getChildAt(0);
  attachViewToParent (view, MAX_CHILD+1, llParent);
  detachViewFromParent (0);
}

这是某种异常,因为您的方法使用getChildAt()removeViewAt()方法,显然Views在它们的方式上留下了一些空白。我认为这可以记录为票。

于 2013-07-26T12:24:02.200 回答