flutter - 如何使旋转图像填充 Flutter 中的可用空间?

标签 flutter transform

我正在尝试将图像显示为圆形菱形。我可以让旋转工作,如果我使用 debugPaintSizeEnabled,它会显示菱形,但图像不会填充该空间。我怎样才能让它膨胀以填充钻石?

截图如下: enter image description here

这是创建菱形小部件的代码:

Transform.rotate(
        angle: math.pi / 4,
        child: ClipRRect(
          borderRadius: new BorderRadius.circular(24.0),
          child: Transform.rotate(
            angle: - math.pi / 4,
            child: Image(
              image: AssetImage("img/kitten_200_1.jpeg"),
              fit: BoxFit.cover,
            ),
          ),
        ),
      ),

最佳答案

1) Transform.rotate 不会影响 child 的大小和位置——它只会改变 child 的绘画方式。

2) 因为您的屏幕截图中没有白色“三角形”中的图像数据,所以要用图像填充它们,我们应该放大图像。但随后它会与相邻的小部件重叠,因此我们也会缩小菱形。

double L = 100; // image side length
double R = 24; // rounding radius
double k = sqrt(2) - R / L * 2 * (sqrt(2) - 1); // a little bit of geometry

现在缩放!

Transform.rotate(
  angle: pi / 4,
  child: Transform.scale(
    scale: 1 / k,
    child: ClipRRect(
      borderRadius: new BorderRadius.circular(R),
      child: Transform.rotate(
        angle: - pi / 4,
        child: Transform.scale(
          scale: k,
          child: Image(
            image: ...,
            width: L,
            height: L,
            fit: BoxFit.cover,
          ),
        ),
      ),
    ),
  ),
);

关于flutter - 如何使旋转图像填充 Flutter 中的可用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351716/

相关文章:

graphics - 在相机小部件顶部显示 mask 区域

text - FittedBox 和文本空格问题

xml - XSLT 1.0 Tansfomation - 将兄弟数据移动到特定的兄弟

Flutter:类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型

user-interface - 可拖动和可滑动的容器

CSS:非绝对元素中的过渡+缩放

java - 使用 XML 绑定(bind)的数据导入/导出功能的灵活性

sql - Oracle 将多列合并为一列

jquery - css/javascript 旋转但不是从中心旋转

flutter - 如何在 GitHub Actions CI/CD 中构建 Flutter