Android 滚动时未绘制子视图?
我实现了一个代码来执行自动水平滚动,并使用postDelay定时器保持滚动继续 要开始滚动,我正在使用:Android 滚动时未绘制子视图?,android,scroll,android-linearlayout,Android,Scroll,Android Linearlayout,我实现了一个代码来执行自动水平滚动,并使用postDelay定时器保持滚动继续 要开始滚动,我正在使用: private void startScrolling() { handler.postDelayed(new Runnable() { public void run() { counter = (int) (counter + 10); handler.postDelayed(th
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。它只是子视图没有绘制
请建议我如何在父视图滚动时添加和显示视图?如前所述替换此:
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()
方法,这显然会留下一些空的视图。我认为这可以记录为票证。如前所述,替换为:
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()
方法,这显然会留下一些空的视图。我认为这可以被记录为一张票证。正如我所看到的,在函数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 view=llParent.getChildAt(0);attachViewToParent(视图,最大子视图+1,最小父视图);detachViewFromParent(0)代码>所有这些都在resetViewPosition()
中。正如我所看到的,在函数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 view=llParent.getChildAt(0);attachViewToParent(视图,最大子视图+1,最小父视图);detachViewFromParent(0)代码>所有这些都在resetViewPosition()
中。