我正在尝试复制一个应用程序登录界面设计,我的设计师完成了这个设计。
背景图片使用的是softLight混合模式,问题在于它要与渐变颜色混合。其次,实际上有两个不同的渐变层(一个紫色渐变,一个蓝色渐变)
原始图片:
最终渐变图像
我已经尝试使用colorBlendMode,例如:
Image.asset(
'assets/pioneer-party.jpg',
fit: BoxFit.cover,
color: Color(0xff0d69ff).withOpacity(1.0),
colorBlendMode: BlendMode.softLight,
),
问题在于 color 属性只能接受单一颜色。
我随后尝试了 BoxDecoration,例如:
DecoratedBox(
decoration: new BoxDecoration(
color: const Color(0xff7c94b6),
image: new DecorationImage(
fit: BoxFit.cover,
colorFilter: new ColorFilter.mode(Colors.purple.withOpacity(1.0), BlendMode.softLight),
image: new NetworkImage(
'http://www.allwhitebackground.com/images/2/2582-190x190.jpg',
),
),
),
),
这仍然让我面临同样的问题。然后我尝试分别堆叠每个图层,并通过渐变来调整使其看起来接近设计,例如:
Image.asset(
'assets/pioneer-party.jpg',
fit: BoxFit.cover,
color: Color(0xff0d69ff).withOpacity(1.0),
colorBlendMode: BlendMode.softLight,
),
DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.topCenter,
end: FractionalOffset.bottomCenter,
colors: [
Color(0xff0d69ff).withOpacity(0.0),
Color(0xff0069ff).withOpacity(0.8),
],
),
),
),
DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.topLeft,
end: FractionalOffset.bottomRight,
colors: [
Color(0xff692eff).withOpacity(0.8),
Color(0xff642cf4).withOpacity(0.8),
Color(0xff602ae9).withOpacity(0.8),
Color(0xff5224c8).withOpacity(0.8),
Color(0xff5e29e5).withOpacity(0.8),
],
stops: [0.0,0.25,0.5,0.75,1.0]
),
),
),
这让我达到了我想要的某种程度,但并非完全符合我的需求。
有人知道如何实现这一点吗?
编辑:
我也在考虑将两个图像混合在一起,但除了使用不透明度之类的东西外,还没有找到方法。理想情况下,希望它能以本地方式呈现,而不是使用“hack”来实现。
CustomPaint
和画布。使用画布,你可以随心所欲地绘制渐变和图像,然后在合并层时应用滤镜。这将是一个有点昂贵的绘制过程,但如果一切都是静态的话应该没问题。如果有东西在移动,那么也许我可以在某个时候重新评估。但是再说一遍——如果图像是静态的,为什么不先在 Photoshop 中合并它,然后使用最终图像呢? =D - rmtmckenzie