что означает android getIntrinsicHeight и getIntrinsicWidth?
Привет я смущен двумя методами из Android Drawable class
getIntrinsicHeight()
getIntrinsicWidth()
определение api говорит
http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()
что означает слово внутренняя высота/ширина?
я имею в виду это ширина самого изображения?
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.
Comments