ImageView的相關成員變量是mMaxWidth
和mMaxHeight
,兩者都聲明爲私有。也沒有可用的getter方法,這會給您提供一個選項:
使用反射檢查字段。
下面是一個示例如何做到這一點:
int maxWidth = -1;
int maxHeight = -1;
ImageView iv = (ImageView) findViewById(R.id.imageview);
try {
Field maxWidthField = ImageView.class.getDeclaredField("mMaxWidth");
Field maxHeightField = ImageView.class.getDeclaredField("mMaxHeight");
maxWidthField.setAccessible(true);
maxHeightField.setAccessible(true);
maxWidth = (Integer) maxWidthField.get(iv);
maxHeight = (Integer) maxHeightField.get(iv);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
其他的答案提到getWidth()
和getHeight()
,但它是不一樣的。如果您運行檢查上面,你會看到不同後,下面的代碼片段(假設大小和最大大小目前還不相同,由於設定值或源圖像大小):
Log.d("TEST", "width="+iv.getWidth()+" || height="+iv.getHeight());
Log.d("TEST", "maxWidth="+maxWidth+" || maxHeight="+maxHeight);
是的,我認爲有** maxWidth **和** maxHeight **值提取存在的原生方式。但這種方式仍然沒有成立。我真的忘了反射:)它工作正常,非常感謝答案:) – NOSTRA
有趣的事情:如果maxWidth或maxHeight沒有聲明在XML 2147483647(Integer.MAX_VALUE)會得到。 – NOSTRA
是的,這是默認值。如果您有興趣瞭解android內部機制,您可以隨時[查看源代碼](http://google.com/codesearch#uX1GffpyOZk/core/java/android/widget/ImageView.java&q=ImageView%20package:android&type=cs)工作。例如。您可以直接看到沒有辦法獲得這些最大值,因爲變量只在文件的幾個點上使用,當您搜索它們的名稱時。 – 2011-11-29 20:01:58