void didChangeDependencies() {
super.didChangeDependencies();
Image.asset(“images/yuan.png”)
.image
.resolve(createLocalImageConfiguration(context))
.addListener((ImageInfo image, bool synchronousCall) {
setState(() {
info = image; //刷新状态
});
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: GridView.builder(
itemCount: blendModes.length - 1,
padding: EdgeInsets.only(top: 10.0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
),
itemBuilder: getItemBuilder,
),
);
}

Widget getItemBuilder(BuildContext context, int index) {
return Column(
children: [
RawImage(
image: info?.image,
color: Colors.red,
width: 40,
height: 40,
colorBlendMode: blendModes[index + 1],
fit: BoxFit.cover,
),
Container(
padding: EdgeInsets.only(top: 10.0),
child: Text(
blendModes[index + 1].toString().split(“.”)[1],
style: TextStyle(
color: Colors.black,
fontSize: 15.0,
),
),
),
],
);
}
}

flutter中的混合模式是枚举类型,和Android中的图片混合模式画笔混合模式基本保持一致。上面的代码描述了所有的混合模式并配有图,除了clear没有在里边(clear模式会清除所有内容)。image是一个简单的图片,带透明通道的绿色的圆,在图中就是dst模式下的样子,背景是一个纯红色,在图中就是src模式下的样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fit属性使用的是Boxfit的枚举值,看一下效果:

  • fill

填充,忽略原有的宽高比,填满为止

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • contain

包含,不改变原有比例让容器包含整个图片,容器多余部分填充背景

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • cover

覆盖,不改变原有比例,让图片充满整个容器,图片多余部分裁剪 ///

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fitWidth

横向图片填充

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fitHeight

纵向图片填充

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • none

原始大小居中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • scaleDown

图片大小小于容器事相当于none,图片大小大于容器时缩小图片大小实现contain

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


centerSlice属性专门用于nine-patch文件。

其他属性暂时不讲。

一般情况下这个控件很少使用,但是他是其他Image控件的实现基础,所以必须要拎出来讲一下。

Image

这是一个通用包装类,它包装了RawImage,同时提供了一些简便的Named constructors来使用AssetsImage,ExactAssetImage等ImageProvider的子类。

  • Image, 从ImageProvider来获取图片显示

这个类的使用基本和RawImage一致,在使用的时候只是将参数ui.Image包装为了ImageProvider,不用再自己监听ImageStream。典型简单用法:

Widget image = Image(AssetImage(“images/yuan.png”))

  • Image.asset, 从Asset资源中获取图片显示

这个方法是ImageProviderAssetImage的简单用法:

Widget image = Image.asset(“images/yuan.png”)

  • Image.network, 从URL获取网络图片显示

这个方法是ImageProviderNetworkImage的简单用法:

Widget image = Image.network(“http://img.rangaofei.cn/01b18.jpg”)

  • Image.file, 从文件中获取图片显示

这个方法是ImageProviderFileImage的简单用法:

Widget image = Image.file(file)

  • Image.memory 从内存中获取图片显示.

这个方法是ImageProviderMemoryImage的简单用法:

Widget image = Image.memory(byteList)

CircleAvatar

主要用来显示用户的头像,任何图片都会被剪切为圆形。

一个简单用法:

CircleAvatar(
child: Text(“头像”),
backgroundImage: AssetImage(“images/yuan.png”),
backgroundColor: Colors.red,
radius: 50.0,
),

生成的图像如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CircleAvatar内置了许多的功能。radius用来控制图片的大小,同时它可以自动感知当前theme是白天模式还是夜间模式来切换图片颜色,另外它实际是包装了AnimatedContainer,设置的动画时间是200ms。在改变它的一些相关属性时会自动使用动画来执行。看一个简单的动图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码如下:

class _MyHomePageState extends State {
double radius = 10.0;

@override
void initState() {
super.initState();
Future.delayed(Duration(milliseconds: 2 * 1000), () {
setState(() {
radius = 20.0;
});
return Duration(milliseconds: 210);
}).then((Duration d) {
Future.delayed(d, () {
setState(() {
radius = 40.0;
});
return Duration(milliseconds: 210);
}).then((Duration d) {
Future.delayed(d, () {
setState(() {
radius = 30.0;
});
});
});
;
});
}

@override
Widget build(BuildContext context) {

return Scaffold(
body: Center(
child: CircleAvatar(
child: Text(“头像”),
backgroundImage: AssetImage(“images/yuan.png”),
radius: radius,
),
),
);
}
}

这里我并没有使用AnimationController来控制radius值的变化,而是通过一个Future延时来控制。初始化的时候radius是10.0,延迟两秒后变为20.0,因为CircleAvatar默认的过度时间是200ms,为了有一个平滑的过渡效果,我把下一次改变时间设置为了210ms,这时半径是40.0,最后经过210ms后半径设置为30.0,整个变化过程为:

10->20->40->30

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;

技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关

在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

相信自己,没有做不到的,只有想不到的

高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

[外链图片转存中…(img-Pg0UeOI7-1711930551669)]

[外链图片转存中…(img-wYijDthO-1711930551670)]

相信自己,没有做不到的,只有想不到的

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐