1、Icon和Image的区别:
在Compose中,图片组件主要有两种,分别是显示图标的
Icon组件和显示图片的Image组件,当我们显示一系列的小图标的时候,我们可以使用Icon组件,当显示图片时,我们就用专用的Image组件。
在
Compose中,图片组件主要有两种,分别是显示图标的Icon组件和显示图片的Image组件,当我们显示一系列的小图标的时候,我们可以使用Icon组件,当显示图片时,我们就用专用的Image组件。在Android传统的View中,我们显示图片和图标都是使用ImageView。我个人比较喜欢Compose的这种分开的方式,增加了代码的可读性。
2、Icon图标组件
Icon组件用于展示一系列的小图标,它支持三种不同类型的图片设置,分别是:矢量图、位图、自定义绘制的图标
(1)矢量图对象,可以显示SVG格式的图标
@Composable
fun Icon(
imageVector: ImageVector,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)
(2)位图对象,可以显示JPG,PNG格式的图标
@Composable
fun Icon(
bitmap: ImageBitmap,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)
3)自定义画笔,可以使用它在canvas上直接绘制图标
@Composable
fun Icon(
painter: Painter,
contentDescription: String?,
modifier: Modifier = Modifier,
tint: Color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
)
当我们使用上面的方法去展示图标时,既可以传递具体类型的实例,也可以通过资源文件(res/drawable …)引用
// 矢量图资源
Icon(imageVector = ImageVector.vectorResource(id = R.drawable.ic_svg), contentDescription = null,tint= Color.Unspecified)
// 位图资源
Icon(bitmap = ImageBitmap.imageResource(id = R.drawable.ic_bmp), contentDescription = null,tint= Color.Unspecified)
// 画笔资源
Icon(painter = painterResource(id = R.drawable.ic_both), contentDescription = null,tint= Color.Unspecified)
3、Icon的使用
//1、不设置颜色,会变成黑色
Icon(painter = painterResource(id = R.drawable.ic_marker_yellow),
contentDescription = null )
//2、显示旗帜的本来颜色-黄色
Icon(painter = painterResource(id = R.drawable.ic_marker_yellow),
contentDescription = null,
tint = Color.Unspecified)
//3、设置旗帜为红色
Icon(painter = painterResource(id = R.drawable.ic_marker_yellow),
contentDescription = null,
tint = Color.Red)
特别注意:必须设置tint= Color.Unspecified,否则显示图标为黑色,不是原来的颜色;
4、可以看到明明是有色的图标为什么预览确变成了黑色?
这是因为图标默认的色调模式 ,我们需要更改tint属性为Color.Unspecified,此时图标就会显示它自己的色彩了。
//2、显示旗帜的本来颜色-黄色
Icon(painter = painterResource(id = R.drawable.ic_marker_yellow),
contentDescription = null,
tint = Color.Unspecified)
tint 属性:在 Icon 组件中使用 tint 属性来设置图标的颜色。例如,tint = Color.Red图标颜色设置为蓝色