Android Compose-Icon的使用

479 阅读2分钟

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)

9464a2c94dd2c5ec620e742157c1935.png

特别注意:必须设置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图标颜色设置为蓝色