Flutter中关于angle的踩坑记录

 更新时间:2022年06月26日 08:53:43   作者:hackware  
考虑到可能有很多同学还没有接触 Flutter,下面这篇文章主要给大家介绍了关于Flutter中关于angle的踩坑记录,文中通过图文介绍的非常详细,需要的朋友可以参考下

这个问题是我最近做业务开发和业余开发都遇到的,这里的 angle 指的是旋转弧度。不是旋转角度

先看一下我使用 angle 的场景吧:

图一中使用了 canvas.drawArc,传入了 startAngle 和 sweepAngle。图二也是如此。图三是 Flutter ConstraintLayout 中圆形定位的 example,我没有使用 Flutter ConstraintLayout 自带的旋转能力,而是用了 Transform.rotate,传入了 angle。Flutter ConstraintLayout 自带的对 Widget 的旋转能力用了 canvas.rotate,也传入了 angle。

我现在还没搞明白弧度和角度的对应关系,官网文档中也没有详细说明。但对于我来说,我根本就不想去关心弧度是多少,我只关心角度,这个角度的范围是 [0.0, 360.0]。以图三中的时钟为例,旋转 0.0 或 360.0 度时,指针应该指向 12,旋转 90.0 度时,指针应该指向 3,旋转 180.0 度时,指针应该指向 6,旋转 270.0 度时,指针应该指向 9。

于是我们需要将旋转弧度转换成旋转角度,我研究出的转换公式如下:

Transform.rotate:

pi + pi * (angle / 180)

canvas.rotate:

angle * pi / 180

canvas.drawArc:

startAngle = -pi / 2
sweepAngle = angle * pi / 180

看见没有,这三类旋转的转换公式都不一样。我不明白 Flutter 官方为什么要这么设计,为啥这么优秀的 Flutter 引入了这么糟糕的 API。于是我带着气愤给官方提了个 Issue,想喷一喷设计这几个 API 的哥们:

结果我被反杀了。

冷静下来之后,我决定提交一个 Pull Request 来修正这个 API。但这需要时间,因为提交 Pull Request 的周期很长,上次我提了个 bug,Oppo 的一个哥们修复了它,Pull Request 等了将近两个月才合并。

总结

到此这篇关于Flutter中关于angle踩坑的文章就介绍到这了,更多相关Flutter中angle坑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • android Activity相对布局的使用方法

    android Activity相对布局的使用方法

    Activity相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一个控件的位置,下面用实例说明Activity相对布局的使用方法
    2013-11-11
  • Android使用okHttp(get方式)下载图片

    Android使用okHttp(get方式)下载图片

    这篇文章主要为大家详细介绍了Android使用okHttp(get方式)下载图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android中SparseArray性能优化的使用方法

    Android中SparseArray性能优化的使用方法

    这篇文章主要为大家详细介绍了Android中SparseArray性能优化的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android编程之内存溢出解决方案(OOM)实例总结

    Android编程之内存溢出解决方案(OOM)实例总结

    这篇文章主要介绍了Android编程之内存溢出解决方案(OOM),结合实例实例总结分析了Android编程过程中常见的内存溢出情况与对应的解决方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Kotlin数据容器深入讲解

    Kotlin数据容器深入讲解

    Kotlin的数据容器分为数组和集合。其中集合分为集合Set、队列List、映射Map等三种集合,每种又包括只读和可变两种类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Android App中各种数据保存方式的使用实例总结

    Android App中各种数据保存方式的使用实例总结

    这篇文章主要介绍了Android App中各种数据保存方式的使用实例,列举了SharedPreferences接口、机身空间存储、SD卡存储和SQLite数据库四种方式的代码例子,需要的朋友可以参考下
    2016-04-04
  • Android中创建一个透明的进度对话框实例

    Android中创建一个透明的进度对话框实例

    这篇文章主要介绍了Android中创建一个透明的进度对话框实例,需要的朋友可以参考下
    2014-05-05
  • Android+SQLite数据库实现的生词记事本功能实例

    Android+SQLite数据库实现的生词记事本功能实例

    这篇文章主要介绍了Android+SQLite数据库实现的生词记事本功能,结合具体实例形式分析了Android操作SQLite数据库实现生词记录功能的操作步骤与相关注意事项,需要的朋友可以参考下
    2017-09-09
  • 详解Android Dialog对话框的五种形式

    详解Android Dialog对话框的五种形式

    这篇文章主要为大家详细介绍了Android对话框的五种形式,一般对话框,列表对话框,单选按钮对话框,多选按钮对话框,自定义对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Flutter UI实现侧拉抽屉菜单

    Flutter UI实现侧拉抽屉菜单

    这篇文章主要为大家详细介绍了Flutter UI实现侧拉抽屉菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论