2016-01-27 149 views
0

我有一个空的滚动视图。我用吹气创建一个文本视图,将其添加到滚动型编程,然后做:Android - 将项目添加到滚动视图并以编程方式滚动

rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0); 

但随着观点尚未测量viewLeft和viewWidth是0。有关如何使其正确滚动视图的任何建议?

+0

你是如何测量viewWidth? – Sanf0rd

+0

直到现在它作为固定的文本视图,我用: int viewLeft = childView.getLeft(); int viewWidth = childView.getWidth(); 但现在我动态添加视图 – Panos

回答

1

在这篇文章中:getWidth() and getHeight() of View returns 0你有很多很好的选择来解决这个问题。特别是我用这一个:

听绘制/布局事件:ViewTreeObserver

一个ViewTreeObserver被炒鱿鱼了不同的绘图事件。通常情况下,OnGlobalLayoutListener是你想要的得到测量,因此在听者的代码将在布局阶段之后被调用,所以观测值准备:

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0); 
     } 
    }); 
+0

不完全是,我使用超级视图来获取树观察者,因为它更容易,但它似乎工作。谢谢! – Panos

1

smoothScrollBy()调用移动到Runnable,并在添加后将其发送到新的TextView的处理程序,这会在布局完成后运行。例如:

viewGroup.addView(childView); 
childView.post(new Runnable() { 
     @Override 
     public void run() { 
      rsView.smoothScrollBy((childView.getLeft() + childView.getWidth()/2) - center, 0); 
     } 
    } 
); 

我不知道你是如何计算center,但如果要看的新TextView尺寸,你需要计算移动到Runnable,也是如此。

相关问题