Ответ Мориса не совсем помог мне, так как я часто получал обратно 0, в результате чего возникало исключение при попытке создать масштабированное растровое изображение:
IllegalArgumentException: ширина и высота должны быть> 0
Я нашел несколько других вариантов, если это кому-нибудь еще поможет.
Вариант 1
imageButton
- это View
, что означает, что мы можем получить LayoutParams
и воспользоваться встроенными свойствами высоты и ширины. Я нашел это из этого другого SO ответа .
imageButton.getLayoutParams().width;
imageButton.getLayoutParams().height;
Вариант 2
Получите imageButton
из класса, который расширяет ImageButton
, а затем переопределите View # onSizeChanged .
Вариант 3
Получите прямоугольник рисования на виде и используйте методы width()
и height()
, чтобы получить размеры:
android.graphics.Rect r = new android.graphics.Rect();
imageButton.getDrawingRect(r);
int rectW = r.width();
int rectH = r.height();
Комбинация
Мой окончательный код в итоге объединил три и выбрал макс. Я делаю это потому, что получаю разные результаты, в зависимости от того, на какой стадии находится приложение (например, когда представление не было полностью прорисовано).
int targetW = imageButton.getDrawable().getBounds().width();
int targetH = imageButton.getDrawable().getBounds().height();
Log.d(TAG, "Calculated the Drawable ImageButton's height and width to be: "+targetH+", "+targetW);
int layoutW = imageButton.getLayoutParams().width;
int layoutH = imageButton.getLayoutParams().height;
Log.e(TAG, "Calculated the ImageButton's layout height and width to be: "+targetH+", "+targetW);
targetW = Math.max(targetW, layoutW);
targetH = Math.max(targetW, layoutH);
android.graphics.Rect r = new android.graphics.Rect();
imageButton.getDrawingRect(r);
int rectW = r.width();
int rectH = r.height();
Log.d(TAG, "Calculated the ImageButton's getDrawingRect to be: "+rectW+", "+rectH);
targetW = Math.max(targetW, rectW);
targetH = Math.max(targetH, rectH);
Log.d(TAG, "Requesting a scaled Bitmap of height and width: "+targetH+", "+targetW);
Bitmap scaledBmp = Bitmap.createScaledBitmap(bitmap, targetW, targetH, true);