两种最常见的图像格式是光栅图像和矢量图像。
光栅图形格式包含像素:微小的单个正方形,包含颜色(由红色、绿色、蓝色和 alpha 值组成)。将许多像素放在一起时,可以形成非常详细的图像,例如照片。光栅图形具有固定分辨率(固定像素数量)。这意味着当您增加图像的大小,它会失去细节,并且可能出现像素化。光栅图形格式的示例包括 JPEG、PNG 和 WEBP。
另一方面,矢量图是屏幕上视觉元素的可缩放数学表示。矢量是一组描述如何在屏幕上绘制图像的命令——例如,一条线、一个点或一个填充。当在屏幕上缩放矢量时,它不会失去质量,因为数学公式将保持不同命令之间的关系。ImageVector 的一个很好的例子是 Material Symbols,因为它们都可以用数学公式定义。
ImageBitmap
在 Compose 中,光栅图像(通常称为 Bitmap
)可以加载到 ImageBitmap
实例中,而 BitmapPainter
负责将位图绘制到屏幕上。
对于简单的用例,可以使用 painterResource()
,它负责创建 ImageBitmap
并返回一个 Painter
对象(在本例中为 BitmapPainter
)
Image( painter = painterResource(id = R.drawable.dog), contentDescription = stringResource(id = R.string.dog_content_description) )
如果您需要进一步的定制(例如 自定义画家实现)并且需要访问 ImageBitmap
本身,您可以按照以下方式加载它
val imageBitmap = ImageBitmap.imageResource(R.drawable.dog)
ImageVector
一个 VectorPainter
负责将 ImageVector
绘制到屏幕上。 ImageVector
支持 SVG 命令的子集。并非所有图像都可以表示为矢量(例如,您使用相机拍摄的照片无法转换为矢量)。
您可以通过导入现有的矢量可绘制 XML 文件(使用 导入工具 导入到 Android Studio 中)或实现类并手动发出路径命令来创建自定义 ImageVector
。
对于简单的用例,painterResource()
对 ImageBitmap
类的工作方式与对 ImageVectors
的工作方式相同,返回一个 VectorPainter
作为结果。 painterResource()
处理将 VectorDrawables
和 BitmapDrawables
分别加载到 VectorPainter
和 BitmapPainter
中。要将 VectorDrawable
加载到图像中,请使用
Image( painter = painterResource(id = R.drawable.baseline_shopping_cart_24), contentDescription = stringResource(id = R.string.shopping_cart_content_desc) )
如果您需要进一步定制并需要访问 ImageVector
本身,您可以按照以下方式加载它
val imageVector = ImageVector.vectorResource(id = R.drawable.baseline_shopping_cart_24)
为您推荐
- 注意:当 JavaScript 关闭时,链接文本会显示
- 自定义画家 {:#custom-painter}
- Compose 中的资源
- 加载图像 {:#loading-images}