【发布时间】:2013-07-26 08:59:23
【问题描述】:
我使用View.scrollTo(...) 和 postDelay 计时器实现了一个代码来执行自动水平滚动,以保持滚动继续。
开始滚动我正在使用:
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。它只是子视图没有绘制。
请建议我如何在父视图滚动时添加和显示视图?
【问题讨论】:
-
如我所见,在函数
resetViewPosition(int viewIndex)中,您将孩子置于viewIndex 位置,然后将其从索引位置移除,最后将第一个视图设置在“队列”的底部" 使用llParent.addView(view);,但是,您正在使用resetViewPosition(0);调用该函数-因此您已经删除了视图并尝试再次执行该过程。您应该使用迭代器 i = 0%MAXCHILD 更改对函数的调用。 -
因为我已经删除了索引 0 视图。所以在第二次迭代中,第二个视图将是我的 0 索引视图......这就是我的想法?再次添加视图后,我的子项总数为 10,n 仅删除放置在最后一个索引的项目。我使用日志确认了它。
-
您实际上有多少子视图?我的意思是新的孩子是按顺序添加的下一个索引,所以你应该删除 0,1,2,3 等,然后重新使用你的方法,但我认为对
resetViewPosition()的调用是不正确的。尝试使用迭代器、内部计数器调用它,该计数器计算viewCount = 0;已执行的次数。 -
所以当删除o索引视图时,下一个视图自动成为第一个视图......不是吗?
-
试试这个,它不能解决它,但会给我们有价值的信息:
View view = llParent.getChildAt(0); attachViewToParent (view, MAX_CHILD+1, llParent); detachViewFromParent (0);all this insideresetViewPosition()。
标签: android scroll android-linearlayout