使用图像作为自定义形状卡片/材料小部件的背景

Posted

技术标签:

【中文标题】使用图像作为自定义形状卡片/材料小部件的背景【英文标题】:Use image as background of custom shape Card/Material widget 【发布时间】:2020-11-16 19:16:37 【问题描述】:

有一个ContinuousRectangleBorder 油漆,我可以将它传递给CardMaterial 小部件的形状参数。

Material(
  shape: ContinuousRectangleBorder(
    borderRadius: BorderRadius.circular(50),
  ),
  elevation: 4,
  color: theme.primaryColor,
  child: image,
  borderOnForeground: true,
)

但在 android 中,如果我将图像传递给小部件,则图像不会作为父级剪辑。 裁剪具有相同形状的图像的最佳方法是什么?

【问题讨论】:

【参考方案1】:

试试这个:

 Material(
  shape: ContinuousRectangleBorder(
    borderRadius: BorderRadius.circular(50),
  ),
  elevation: 4,
  color: theme.primaryColor,
  child: image,
  borderOnForeground: true,
  clipBehavior: Clip.antiAliasWithSaveLayer,
)

【讨论】:

【参考方案2】:

为 Android 创建一个CustomClipper 类:

class ImageContinuousClipper extends CustomClipper<Path> 
  @override
  Path getClip(Size size) 
    return ContinuousRectangleBorder(borderRadius: BorderRadius.circular(200 * 0.625))
        .getOuterPath(Rect.fromLTWH(0, 0, size.width, size.height));
  

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) 
    return false;
  

一般来说,你可以这样做:

class MyWidget extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Center(
        child: SizedBox(
          width: 200,
          child: AspectRatio(
            aspectRatio: 1,
            child: Card(
              shape: ContinuousRectangleBorder(
                borderRadius: BorderRadius.circular(200 * 0.625),
              ),
              child:Image.network(
                  'https://images.pexels.com/photos/2853198/pexels-photo-2853198.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500',
                  fit: BoxFit.cover),
            ),
          ),
        ),
      ),
    );
  

【讨论】:

以上是关于使用图像作为自定义形状卡片/材料小部件的背景的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Cards:如何在 Flutter 中创建自定义卡片小部件

如何设置自定义小部件的背景颜色和边框宽度?

如何在wordpress中使用自定义小部件

带有媒体上传按钮的自定义Wordpress窗口小部件,在每个窗口小部件上插入相同的图像

Qt 自定义小部件如何通知 ScrollArea 父级视图更改

使用透明背景、ttk 框架背景颜色配置 tkinter/ttk 小部件?