在Android应用中获取View大小的最佳方法是什么?

时间:2011-12-27 04:31:48

标签: android android-layout

我有一个ImageView,它将显示来自网络的图像。我使用AsyncTask加载图像并在AsnycTask的 onPostExecute 事件中呈现图像。从网络加载的图像可能非常大,无法在手机中解码,因此我必须知道图像视图的大小并在运行时重新调整图像大小。

View类有 getWidth getHeight 方法,但我不知道何时调用它们是安全的。我试图在包含Fragments的 onCreateView 事件中调用这些方法,但两者都返回0;如果我在AsyncTask的 onPostExecute 事件中调用这些方法,则返回值为非零且正确。

所以我在想什么时候调用这些方法并获得视图大小的最佳时机。

3 个答案:

答案 0 :(得分:0)

您应该在异步任务的onPostExecute方法中调用它们。它在onCreateView中返回0,因为视图还没有充满图像。

答案 1 :(得分:0)

如果可以,请在android:scaleType="fitXY"中设置ImageView属性。

答案 2 :(得分:0)

这是android确实非常糟糕的事情之一。在实际测量视图,活动或片段时,您无法访问任何钩子。最好的办法是在dp中设置图像视图的默认大小(最好是在xml中,但你也可以使用LayoutParams以编程方式)。然后,正如Paresh建议的那样,您只需使用scaleType来调整图像大小。

如果你真的想要获得视图的宽度和高度,你需要对视图进行子类化并覆盖onSizeChanged,并根据那里的宽度和高度做你想做的任何事情。

请记住,如果您从网上下载多个非常大的图像,然后仅使用图像视图scaleType调整大小,您可能会在某些手机中遇到内存警告和异常。您可能需要查看以下主题:Strange out of memory issue while loading an image to a Bitmap object