bounty还有2天到期。此问题的答案有资格获得+50声望奖励。Hamed Hamedi希望引起更多的注意这个问题:在自定义绘图器中,可能会出现在形状后面模糊较低层的情况。请分享你对这个有趣的挑战的看法。
我编码下面的输出,我得到了我想要的设计,但无法得到画布内的模糊效果。
这是我试图构建的输出
这是我尝试过的
这里是代码,
class MyCustomPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint0 = Paint()
..color = const Color.fromARGB(128,255,255,255)
..style = PaintingStyle.fill
..strokeWidth = 2.0;
Path path0 = Path();
path0.moveTo(size.width * 0.1500300, size.height * 0.1238500);
path0.cubicTo(
size.width * 0.0037200,
size.height * 0.1023500,
size.width * 0.0522600,
size.height * 0.7552500,
size.width * 0.1500500,
size.height * 0.8761750);
path0.cubicTo(
size.width * 0.2767600,
size.height * 0.8761750,
size.width * 0.7234100,
size.height * 0.8735500,
size.width * 0.8501100,
size.height * 0.8735500);
path0.cubicTo(
size.width * 0.9464300,
size.height * 0.7575750,
size.width * 0.9946900,
size.height * 0.0944750,
size.width * 0.8496900,
size.height * 0.1268750);
path0.cubicTo(
size.width * 0.7230200,
size.height * 0.1268750,
size.width * 0.5303400,
size.height * 0.1263500,
size.width * 0.1500300,
size.height * 0.1238500);
path0.close();
canvas.drawPath(path0, paint0);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
先谢谢你了!
5条答案
按热度按时间7dl7o3gd1#
您不需要为
CustomPainter
而烦恼,所有事情都可以用Container
和BackdropFilter
小部件完成。代码示例
用法
截图
You can try the full example on zapp.run
eimct9ow2#
我不知道你是否有严格的要求使用自定义绘制,但你可以使用
BackdropFilter
并使用ImageFilter.blur
作为过滤器值来实现这种效果。q3qa4bjr3#
使用
BackdropFilter
。演示使用:zpjtge224#
首先,你必须将
extendBody
作为true
传递给脚手架,这样主体将延伸到底部导航栏上,然后像这样添加带有BackDropFilter的bottomNavigationBar,在这里,我尝试创建问题中共享的UI,我在
BackDropFilter
中添加了2个BottomNavigationBarItem
,以便模糊底部导航栏的背景。here是完整的代码供参考.zqdjd7g95#
我已经能够达到你所需要的非常接近的结果。尤其是模糊效果。使用的关键元素是ClipRRect,ClipPath,BackdropFilter。我也用过其他元素,但这取决于你。我们的想法是对角剪裁矩形,这样一边是模糊的,另一边是透明的。此外,剪裁限制了矩形外背景滤镜的效果,否则会导致整个屏幕上的模糊效果。如果你在不透明度的情况下使用各种颜色值,你可以得到确切的结果。您也可以在此Dartpad link中查找结果
main.dart file.