我创建了一个自定义视图,用于在屏幕内打包25个具有不同半径的圆圈。
为此,它涉及许多需要getWidth(), getHeight(), getLeft(), getRight()
等的计算。我已经公开了一种设置数据的方法。
我一设置数据,就会尝试执行计算,然后无效。但总是getWidth(), getHeight(), getLeft(), getRight()
返回零
作为解决方法,我在onLayout()
覆盖中执行了计算。因此,当我为视图设置数据时,我会调用requestlayout()
和invalidate()
。这暂时工作正常。但我觉得这不是完成它的正确方法。
是否有任何推荐的方法。
答案 0 :(得分:2)
实际上,如果我们尝试从onCreate()方法调用getHeight()和getWidth()方法,会发生什么。当我们尝试访问图像视图的高度或宽度时,即使在布局加载到屏幕之前,它也必须返回Null。
我可以使用以下方法解决它:
@Override
public void onWindowFocusChanged (boolean hasFocus) {
// the height will be set at this point
Logger.show(Log.INFO, "", "profilePic.getHeight()....."+profilePic.getHeight());
Logger.show(Log.INFO, "", "profilePic.getWidth()....."+profilePic.getWidth());
}
onWindowFocusChanged()在加载视图并为用户交互做好准备时调用。