JetpackCompose基础学习2.2
文章目录
- 记录状态
- 加载不同存放位置中图片:
- 1、加载项目内置资源(res 目录)
- 2、加载本地文件路径(SD卡等)
- 3、加载网络图片(使用 Coil)
- 4、加载 Assets 目录资源
- 5、加载 Raw 目录资源
记录状态
在Compose中记录状态,对于列表的实现;
val cardMessageList = remember {mutableListOf(EditInputBean( )).map{it.copy()}.toMutableStateList()}
而其他基础类型记录状态可以简单实现,如下所示
val endTime by remember { mutableStateOf(“/* value */”) }
value 中的类型可以是Int,String,Boolean等基础数据类型
加载不同存放位置中图片:
1、加载项目内置资源(res 目录)
// 加载 res/drawable 或 res/mipmap 中的图片
Icon(painter = painterResource(id = R.drawable.ic_both), // 资源IDcontentDescription = "内置图标"
)
2、加载本地文件路径(SD卡等)
// 需要 READ_EXTERNAL_STORAGE 权限
val context = LocalContext.current
val filePath = "/sdcard/Pictures/icon.png"Icon(painter = rememberImagePainter(ImageRequest.Builder(context).data(File(filePath)).apply(block = fun ImageRequest.Builder.() {placeholder(R.drawable.loading) // 加载占位图error(R.drawable.error) // 错误显示}).build()),contentDescription = "本地文件图标"
)
3、加载网络图片(使用 Coil)
// 1. 添加依赖:implementation(“io.coil-kt:coil-compose:2.4.0”)
// 2. 代码实现
Icon(painter = rememberAsyncImagePainter(model = "https://example.com/icon.png",placeholder = painterResource(R.drawable.placeholder),error = painterResource(R.drawable.error)),contentDescription = "网络图标"
)
4、加载 Assets 目录资源
// 文件需放在 src/main/assets/ 目录下
val assetPath = “icons/ic_both.png”
Icon(painter = rememberImagePainter(ImageRequest.Builder(LocalContext.current).data("file:///android_asset/$assetPath").build()),contentDescription = "Assets资源"
)
5、加载 Raw 目录资源
// 文件需放在 src/main/res/raw/ 目录下
val rawResourceId = R.raw.animated_iconIcon(painter = painterResource(id = rawResourceId),contentDescription = "Raw资源"
)