2014-09-05 3 views
2

У меня есть панель действий, текстовое представление и изображение в моем макете. Изображение имеет ширину и высоту match_parent. Imageview занимает остальную часть пространства, оставленного в представлении. Я хочу установить растровое изображение в представление, но оно слишком велико. Поэтому я сначала хочу получить ширину и высоту изображения и использовать их для масштабирования растрового изображения, а затем установить его образ. Я попытался получить ширину и высоту изображения в OnCreate, но это похоже на 0,0, вероятно, потому, что показ изображения еще не создан.Получить ширину и высоту ImageView перед установкой растрового изображения

Просьба предложить, как это сделать?

Спасибо.

+0

User ViewTreeObserver в вашем методе onCreate. –

+0

Я пробовал ViewTreeObserver на imageView в OnCreate, но все же ширина и высота изображенияView внутри onGlobalLayout составляет 0,0. :-( – MobileAppDeveloper

ответ

-1

Вы пробовали эту ссылку?

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap

Существует в основном такой метод особенно используется для предотвращения проблем с памятью из-за больших растровых изображений. Сначала прочитайте размеры, а затем оцените масштабированный образец.

+0

Спасибо за ответ. Я знаю это. Я хочу знать размеры изображения и использовать эти измерения для масштабирования растрового изображения. Поэтому проблема заключается не в загрузке растрового изображения в память, а в получении размеров из изображения, перед установкой растрового изображения. – MobileAppDeveloper

1

вам нужно использовать ViewTreeObserver onPreDrawListener, это вызывается после того, как все измеряется и прямо перед рисуется

ImageView iv = (ImageView)findViewBYId(R.id.imageview); 
ViewTreeObserver observer = iv.getViewTreeObserver() 
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 

    public boolean onPreDraw(){ 
     observer.removeOnPreDrawListener(this); 
     //do your stuff here 
    } 
} 
+0

Спасибо за ответ. Я попробую, но мне любопытно, будет ли это хорошей практикой, чтобы установить растровое изображение в изображение в OnPreDraw? – MobileAppDeveloper

+0

почему вы думаете, что его нет? его единственный способ получить размер из ImageView для сворачивают изображения, если вам нужно – tyczj

+0

я получаю IllegalStateException на на observer.removeOnPreDrawListener (это); java.lang.IllegalStateException: Это ViewTreeObserver нет в живых, называют getViewTreeObserver() снова на андроид .view.ViewTree Observer.checkIsAlive (ViewTreeObserver.java:720) at android.view.ViewTreeObserver.removeOnPreDrawListener (ViewTreeObserver.java:563) – MobileAppDeveloper

0

Если вы заинтересованы только в изменении макета конкретного ImageView, то раскладку слушателя на нем может быть способ:

imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     // do stuff 
    } 
}); 
Смежные вопросы