分辨率感知图像不工作-颤振



我正试图通过将每个图像转换为位图来添加分辨率感知图像标记到谷歌地图:

static Future<BitmapDescriptor> makeBitmapDescriptor(String path) {
return BitmapDescriptor.fromAssetImage(
ImageConfiguration(), "assets/pinLocationIcons/house.png");
}

我遵循了flutter文档中的格式:

…/pinLocationIcons house.png
…/pinLocationIcons/2.0 x/house.png
…/pinLocationIcons/3.0 x/house.png
…等。

它似乎不能同时在android和ios上工作。在我的yaml文件中,我尝试只声明"…/image.png"并特别声明每个变体的目录/文件。但是,它继续使用1x图像。

我试着这样命名文件:

…/pinLocationIcons house.png
/pinLocationIcons house@2x.png
…/pinLocationIcons house@3x.png
等。

这现在适用于ios,但android总是使用1x图像。是否有我错过的东西,可以使它的工作在ios和android?我的配置有问题吗?

经过一番调查,我发现我需要在用于制作位图的图像配置中声明设备像素比率。

static Future<BitmapDescriptor> makeBitmapDescriptor(
String path, BuildContext context) {
return BitmapDescriptor.fromAssetImage(
ImageConfiguration(devicePixelRatio: MediaQuery.of(context).devicePixelRatio,
path,
);
}

如果您正在进行的项目有截止日期,我建议您手动找到资产路径。似乎你已经按照https://flutter.dev/docs/development/ui/assets-and-images

做了所有的事情

按照Shaveen的回答,你也可以避免像这样使用BuildContext:

static Future<BitmapDescriptor> makeBitmapDescriptor(
String path) {
return BitmapDescriptor.fromAssetImage(
ImageConfiguration(devicePixelRatio: MediaQueryData.fromWindow(WidgetsBinding.instance.window).devicePixelRatio,
path,
);
}

使用MediaQueryData.fromWindow(WidgetsBinding.instance.window).devicePixelRatio

最新更新