flutter - Flutter PhotoView - 围绕手指之间的点旋转
问题描述
我正在使用 PhotoView ( https://pub.dev/packages/photo_view ) 来展示以 gif 格式保存的地图。我需要缩放和旋转的能力。我的代码:
class MapView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PhotoView(
imageProvider: AssetImage("assets/maps/my_map.gif"),
enableRotation: true,
backgroundDecoration: BoxDecoration(
color: Colors.white,
),
);
}
}
问题是图片相对于图片中心旋转,不方便。我希望旋转大约是执行旋转手势的两个手指之间的一个点(如在法线贴图应用程序中)。我在 PhotoView 文档中没有找到有关如何解决此问题的任何信息。
我希望得到您的支持。
我的最终代码(使用matrix_gesture_detector):
class MapView extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MapViewState();
}
class _MapViewState extends State<MapView> {
Matrix4 transform;
@override
void initState() {
super.initState();
transform = Matrix4.identity();
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: MatrixGestureDetector(
onMatrixUpdate: (m, tm, sm, rm) {
setState(() {
transform = m;
});
},
child: Transform(
transform: transform,
child: Image.asset("assets/maps/my_map.gif"),
),
),
);
}
}
解决方案
所以我在照片视图中找不到任何可以帮助您实现它的东西,所以请改用 这个包。矩阵手势检测器将完全按照您想要的方式工作。
示例代码:
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
Matrix4 transform;
@override
void initState() {
super.initState();
transform = Matrix4.identity();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: MatrixGestureDetector(
onMatrixUpdate: (m, rs, ry, rx){
setState(() {
transform = m;
});
},
child: Container(
transform: transform,
height: 200,
width: 200,
color: Colors.blue,
),
),
),
);
}
}
您可以在容器中放置您喜欢的任何东西,在您的案例装饰图像中。
推荐阅读
- html - 用于不同表单/方法的 HTML 1 输入文本
- javascript - 将对象发送到函数,得到错误的顺序
- r - 如何对R数据框中的唯一值进行排名
- php - 当任何成员为空时,array_search 返回 0
- azure - 在流分析中关联事件
- django - 形成一个自定义小部件值,看起来像自定义日期
- python - 数据框附加日期时间数据并写入 .wac 文件
- android - 将数据从 Android 应用程序发送到 Lotus Notes 数据库
- c# - 不正确的字符串值:第 1 行的列 'DisplayName' 的 '\xD8\xA7\xD9\x84\xD8\xB9...'
- mongodb - 如何使用golang在mongodb中使用$lookup获取计数值?