что означает android getIntrinsicHeight и getIntrinsicWidth?



Привет я смущен двумя методами из Android Drawable class

getIntrinsicHeight()
getIntrinsicWidth()

определение api говорит http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()

что означает слово внутренняя высота/ширина? я имею в виду это ширина самого изображения?

160   3  

3 ответов:

если вы хотите знать значение внутренние, это не что иное, как фактическое свойство, которым обладает объект. В нашем случае getIntrinsicWidth/Height просто означает, чтобы предоставить вам ширину/высоту по умолчанию этого drawable.

это возвращает точный размер drawable, который вы поместили в папку ресурсов без каких-либо изменений.

теперь вы должны это знать getWidth или getHeight возвращает значение, которое может варьироваться в зависимости от ширины и высота указанном ImageView в XML-макете.

допустим, что вы предоставили ширину и высоту вашего ImageView как 100*100 в XML-макете и drawable, который вы использовали в качестве фона, имеет размер 200*200.

теперь getIntrinsicWidth должен вернуть 200 тогда как getWidth должен вернуть 100.

вопрос здесь на stackoverflow.

Если ваше изображение загружено из интернета,.getIntrinsicWidth() и .getIntrinsicHeight() действительно дать вам "реальную" ширину и высоту, соответственно, изображения.

он называется внутренним, потому что он зависит только от изображения и ни от чего другого (например, от вашего телефона).

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

вот где вы получаете неправильный (а именно, не свойственный) результат. Допустим, вы используете значок запуска по умолчанию, а затем

Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());

покажет вам ширину (в пикселях)значка запуска. Но какой именно? - у вас есть несколько из них, один в папке drawable-xhdpi, один в папке drawable-hdpi и т. д. Ну, если ваше устройство, скажем, xhdpi, оно дает вам 96, что действительно является шириной пикселя версии значка запуска, находящегося в drawable-xhdpi папка. Теперь удалите значок в папке drawable-xhdpi и запустите снова (все еще используя устройство xhdpi (реальное или эмулированное)). Изображение, которое будет использоваться, будет из папки drawable-hdpi, потому что это "ближе всего" к версии xhdpi. Этот значок имеет ширину пикселя 72. Но выше код все равно даст вам 96!!!

Так что если вы так же ленивы, как и я, и есть поэтому, не создавая 4 версии каждого значка/изображения ресурса (но вместо этого используя только 1 или 2 и масштабируя их вручную), вы должны остерегаться упомянутого андроидного неправильного названия.

в android drawable может быть много типов, таких как цвет, растровое изображение, форма и т. д.

некоторые из этих чертежей имеют внутреннюю высоту, такую как BitmapDrawable, которая является размером изображения.

чертежи, такие как ColorDrawable (используется для рисования только сплошных цветов), не имеют собственной высоты. В этом случае значение getIntrinsicHeight/Width возвращает -1.

даже если drawable не имеет внутренней высоты / ширины, каждый drawable должен иметь их границы устанавливаются до того, как они могут отображать себя (т. е. до того, как вы назовете mydrawable.рисовать(холст))

Если вы используете drawable в качестве фона для представления, представление внутренне устанавливает границы для вас. Но если вы используете drawables в своем собственном onDraw, то вам нужно явно установить границы с помощью setBounds.

    Ничего не найдено.

Добавить ответ:
Отменить.