2013-12-16 2 views
0

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

public class MyImageView extends ImageView 

Теперь я перехожу к MyImageView изображения с помощью setImageResource(int resId)

Теперь мне нужно получить исходные размеры изображения прошло,

мне нужно сделать, что внутри MyImageView, так что я могу используйте размер для моей реализации onDraw().

Как это сделать?

+1

Вы пробовали 'getIntrinsicHeight' и' getIntrinsicWidth' 'Drawable'? – Stan

+0

Bitmap b = ((BitmapDrawable) imageView.getBackground()). GetBitmap(); int w = b.getWidth(); int h = b.getHeight(); –

+0

@Stan yours - самое ценное предложение. Благодаря! –

ответ

1

андроида Drawable предоставляет методы getIntrinsicHeight и getIntrinsicWidth, которые должны возвращать предпочтительный («реальный» в некотором смысле) размер лежащего под ним объекта, если он вообще поддерживает атрибут размера. Я предполагаю, что они должны работать в вашем случае, пока вы читаете реальные изображения, но если по какой-то причине они не выполняются (т.е. возвращают -1), возможно, обходные пути могут заключаться в анализе заголовка изображения (например, заголовка растрового изображения или SVG документ, вручную или с использованием существующих библиотек изображений) или сохранить карту с размерами ваших графических ресурсов вместе с самими ресурсами.

0

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.yourBitmap);

Тогда попробуйте image.getWidth и image.getHeight()

UPDATE

вы можете установить decodebounds истинные и передать границы, чтобы получить dimensions без декодирования весь растрового

+0

thaks Arju, но мне нужно зайти изнутри подкласса –

+0

, вы можете получить это из любого места, если нужно, при необходимости, передать контекст –

+0

. Отправьте свой код подкласса –

0
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 
int height = bitmap.getHeight(); 
int width = bitmap.getWidth(); 
+0

thaks birdy, но мне нужно сделать это изнутри подкласса –

+0

, чтобы вы могли просто call Bitmap bitmap = ((BitmapDrawable) getDrawable()). getBitmap() для получения растрового изображения – birdy

Смежные вопросы