我的主要活动视图中有ViewFlipper。在onCreate我实例化添加到ViewFlipper的视图。之后我将显示的孩子设置为第一个。当单击一个按钮时,我将ViewFlipper的显示子项切换到第二个视图。在调用viewFlipper.setDisplayedChild(1)
之后,我需要做一些计算并立即显示一些基于所显示孩子的宽度和高度的对象。
这里的主要问题是第一次(第二次= 1)显示孩子的视图测量尚未完成。所以我的宽度和高度都是0.如果我回去(setDisplayedChild(0)
)而不是回到第二个孩子就可以了(宽度和高度都正确)。
我对这种观点行为做了一些研究,发现有一种方法[onMeasure
](http://developer.android.com/reference/android/view/View.html#onMeasure (int,int))可以覆盖,一切都可以在这里完成。好吧,它应该如何。实际上它是但问题是在每个视图切换上调用onMeasure
4次。我的发现是,第一和第三个呼叫宽度和高度是全屏大小的。第二次和第四次调用是适当的宽度和高度。因为我必须在那时立即新对象,所以在onMeasure
中执行它是不明智的。
还有其他正确的方法吗? 是否可以强制测量? 我是否真的需要在屏幕上显示测量结果?
此致 Zmeda
答案 0 :(得分:3)
在测量ViewFlipper的子节点后,应该调用你的init-action(基于显示子节点的宽度和高度),你可以使用方法post来实现,例如:
viewFlipper.setDisplayedChild(1);
viewFlipper.post(new Runnable() {
@Override
public void run() {
Log.d("test", "w: " + viewFlipper.getCurrentView().getWidth());// not 0
//do some calculations and instantate some objects
}
});