Android Получить размеры изображения в ImageButton - PullRequest
4 голосов
/ 15 июля 2011

Есть ли способ получить размеры изображения, которые в данный момент установлены в ImageButton?Я пытаюсь добиться этого.

У меня есть ImageButton с изображением по умолчанию 36 x 36. Затем я выбираю изображение размером, скажем, 200 x 200. Я хочу назвать что-то вроде:

imageButton.setImageBitmap(Bitmap.createScaledBitmap(
                        bitmap, 36, 36, true));

, чтобы уменьшить изображение до 36 x 36. Причина, по которой я хочу получить исходный размер изображения, заключается в том, чтобы учитывать hdpi, mdpi и ldpi, чтобы я мог установить размеры растрового изображения на 36 x 36, 24 x 24и 18 х 18 соответственно, прежде чем добавить его к ImageButton.Любые идеи?

О, чувак, я получил ответ после случайной игры с кодом:

imageButton.getDrawable().getBounds().height();    
imageButton.getDrawable().getBounds().width();

Ответы [ 2 ]

5 голосов
/ 05 сентября 2011

Попробуйте этот код -

imageButton.getDrawable().getBounds().height();    
imageButton.getDrawable().getBounds().width();
2 голосов
/ 04 июня 2014

Ответ Мориса не совсем помог мне, так как я часто получал обратно 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);
...