我创建了一个自定义视图,以将25个半径不同的圆合并在屏幕内。
为此,它涉及许多需要getWidth(), getHeight(), getLeft(), getRight()
等的计算。我已经公开了一种设置数据的方法。
设置数据后,我立即尝试执行计算,然后使之无效。但总是getWidth(), getHeight(), getLeft(), getRight()
返回零
解决方法是,我在onLayout()
覆盖下执行了计算。因此,当我为视图设置数据时,我调用requestlayout()
和invalidate()
。暂时运行良好。但是我觉得这不是完成它的正确方法。
有没有推荐的方法可以做到这一点。
最佳答案
实际上,如果尝试从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()。
关于android - Android自定义 View :使用getWidth(),getHeight(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24257442/