Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义视图:使用getWidth(),getHeight()_Android_Android Custom View - Fatal编程技术网

Android自定义视图:使用getWidth(),getHeight()

Android自定义视图:使用getWidth(),getHeight(),android,android-custom-view,Android,Android Custom View,我已经创建了一个自定义视图,在屏幕中包含25个不同半径的圆。 为此,它涉及许多计算,这些计算需要getWidth()、getHeight()、getLeft()、getRight()等等,我已经公开了一个设置数据的方法 一旦我设置了数据,我就会尝试执行计算,然后使其无效。但总是,getWidth()、getHeight()、getLeft()、getRight()返回零 作为一种解决方法,我在onLayout()override中执行了计算。因此,当我为视图设置数据时,我调用requestlay

我已经创建了一个自定义视图,在屏幕中包含25个不同半径的圆。 为此,它涉及许多计算,这些计算需要
getWidth()、getHeight()、getLeft()、getRight()
等等,我已经公开了一个设置数据的方法

一旦我设置了数据,我就会尝试执行计算,然后使其无效。但总是,
getWidth()、getHeight()、getLeft()、getRight()
返回零

作为一种解决方法,我在
onLayout()
override中执行了计算。因此,当我为视图设置数据时,我调用
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()。

使用getMeasuredWidth()和getMeasuredHeight()