ImageView ScaleType 与可绘制文件夹
ImageView ScaleType vs drawable folders
我认为不同的可绘制文件夹(例如 drawable-xhdpi
、drawable-hdpi
)的目的是为了避免不必要的重新缩放以节省资源。
但是,如果我想将图像放入 ImageView
,我必须选择合适的 ScaleType
才能正确显示图像。
根据文档:
center
Displays the image centered in the view with no scaling.
centerCrop
Scales the image such that both the x and y dimensions are greater
than or equal to the view, while maintaining the image aspect ratio;
crops any part of the image that exceeds the size of the view; centers
the image in the view.
centerInside
Scales the image to fit inside the view, while maintaining the image
aspect ratio. If the image is already smaller than the view, then this
is the same as center.
fitCenter
Scales the image to fit inside the view, while maintaining the image
aspect ratio. At least one axis will exactly match the view, and the
result is centered inside the view.
fitStart
Same as fitCenter but aligned to the top left of the view.
fitEnd
Same as fitCenter but aligned to the bottom right of the view.
fitXY
Scales the x and y dimensions to exactly match the view size; does not
maintain the image aspect ratio.
如您所见,除 center
之外的所有缩放类型都重新缩放图像。
我的第一个问题:
如果图像视图无论如何都会重新缩放图像,我为什么要提供这么多不同的分辨率?
我的第二个问题:
我可以将 drawable-nodpi
文件夹用于任何图像,然后使用像 fitCenter
这样的缩放类型,这样图像将始终具有正确的大小。为什么我应该使用 drawable-nodpi
以外的任何文件夹?
不同的资源文件夹主要用于图标,因为它们在大多数情况下会导致模糊,这有助于解决下一个问题:
- 使用 1,5 等比例因子缩放图标后,图标可能
看起来很模糊。
- 它允许您为低分辨率设备使用简单的图像(细节较少)。与 24x24 相比,您可以在 72x72 图标上绘制更多内容。
- 还提供不同分辨率的图像,让您可以设置
具有 wrap_content 大小的 ImageView,没有计算确切的尺寸
以 dps 为单位的大小。
我几乎所有内容都只使用 xx-hdpi 文件夹的高分辨率资源,android 会自动将其缩放为 ldpi、hdpi、mdpi 等。因此,例如,当您在 hdpi 设备上使用 xx-hdpi 文件夹中的图标时,它将缩小两倍。您可以在此处找到更多信息:http://developer.android.com/guide/practices/screens_support.html
而且我只对图标使用不同分辨率的文件夹。
这是屏幕密度或 dpi(每英寸点数)的问题;它是屏幕上特定区域内的像素数。
一般来说,如果您是初学者,您可以删除这些文件夹并只使用一个 (drawable
),没问题,但最好使用不同的 drawable
和 mipmap
文件夹以制作高质量的 Android 应用程序,该应用程序在具有不同屏幕尺寸的不同设备上看起来都很棒。
现在总结一下,ImageView.ScaleType 只设置资源的边界以适应视图的边界,而使用不同的 drawable
文件夹允许 Android 选择为我们的设备关闭具有最佳密度的资源,这会为我们的应用程序带来更好的外观。
阅读此 documentation and this blog 中有关此主题的更多信息。
我认为不同的可绘制文件夹(例如 drawable-xhdpi
、drawable-hdpi
)的目的是为了避免不必要的重新缩放以节省资源。
但是,如果我想将图像放入 ImageView
,我必须选择合适的 ScaleType
才能正确显示图像。
根据文档:
center
Displays the image centered in the view with no scaling.
centerCrop
Scales the image such that both the x and y dimensions are greater than or equal to the view, while maintaining the image aspect ratio; crops any part of the image that exceeds the size of the view; centers the image in the view.
centerInside
Scales the image to fit inside the view, while maintaining the image aspect ratio. If the image is already smaller than the view, then this is the same as center.
fitCenter
Scales the image to fit inside the view, while maintaining the image aspect ratio. At least one axis will exactly match the view, and the result is centered inside the view.
fitStart
Same as fitCenter but aligned to the top left of the view.
fitEnd
Same as fitCenter but aligned to the bottom right of the view.
fitXY
Scales the x and y dimensions to exactly match the view size; does not maintain the image aspect ratio.
如您所见,除 center
之外的所有缩放类型都重新缩放图像。
我的第一个问题:
如果图像视图无论如何都会重新缩放图像,我为什么要提供这么多不同的分辨率?
我的第二个问题:
我可以将 drawable-nodpi
文件夹用于任何图像,然后使用像 fitCenter
这样的缩放类型,这样图像将始终具有正确的大小。为什么我应该使用 drawable-nodpi
以外的任何文件夹?
不同的资源文件夹主要用于图标,因为它们在大多数情况下会导致模糊,这有助于解决下一个问题:
- 使用 1,5 等比例因子缩放图标后,图标可能 看起来很模糊。
- 它允许您为低分辨率设备使用简单的图像(细节较少)。与 24x24 相比,您可以在 72x72 图标上绘制更多内容。
- 还提供不同分辨率的图像,让您可以设置 具有 wrap_content 大小的 ImageView,没有计算确切的尺寸 以 dps 为单位的大小。
我几乎所有内容都只使用 xx-hdpi 文件夹的高分辨率资源,android 会自动将其缩放为 ldpi、hdpi、mdpi 等。因此,例如,当您在 hdpi 设备上使用 xx-hdpi 文件夹中的图标时,它将缩小两倍。您可以在此处找到更多信息:http://developer.android.com/guide/practices/screens_support.html
而且我只对图标使用不同分辨率的文件夹。
这是屏幕密度或 dpi(每英寸点数)的问题;它是屏幕上特定区域内的像素数。
一般来说,如果您是初学者,您可以删除这些文件夹并只使用一个 (drawable
),没问题,但最好使用不同的 drawable
和 mipmap
文件夹以制作高质量的 Android 应用程序,该应用程序在具有不同屏幕尺寸的不同设备上看起来都很棒。
现在总结一下,ImageView.ScaleType 只设置资源的边界以适应视图的边界,而使用不同的 drawable
文件夹允许 Android 选择为我们的设备关闭具有最佳密度的资源,这会为我们的应用程序带来更好的外观。
阅读此 documentation and this blog 中有关此主题的更多信息。