我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用Android Flutter实现创意时钟

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用Android Flutter实现创意时钟

这篇文章主要介绍“怎么使用Android Flutter实现创意时钟”,在日常操作中,相信很多人在怎么使用Android Flutter实现创意时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Android Flutter实现创意时钟”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本案例使用的环境是:

Flutter (Channel stable, 2.2.3, on macOS 11.0.1 20B29 darwin-arm, locale zh-Hans-CN)
    • Flutter version 2.2.3 at /Users/moon/Documents/sdk/flutter
    • Framework revision f4abaa0735 (2 months ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

1.构建一个代表时间的小格子

一个最普通的Container 里包含一个text

_Number() {  return Container(    width: 40,    height: 40,    child: Text(      "5",      style: TextStyle(color: Colors.white, fontSize: 16),    ),  );}

通过看上边的gif图就能设计出来,小格子是有状态的,是当前的时间点数字的话背景色改变,同时也可以让这个数字的字体变大一点,区别于其他数字,而且他会在所在的列里位于屏幕的中部。 所以先简单封装下这个小格子。

_Number(int number, bool isActive) {  var backgroundColor;  var numberSize;  if (isActive) {    backgroundColor = Colors.black;    numberSize = 18.0;  } else {    backgroundColor = Colors.deepPurpleAccent;    numberSize = 16.0;  }  return Container(    alignment: Alignment.center,    width: _normalSize,    height: _normalSize,    child: Text(      "$number",      style: TextStyle(color: Colors.white, fontSize: numberSize),    ),  );

2.构建一列小格子

既然是几列数字条构成的一个时钟,所以想下大概是绘制出一条就可以了,其他的几个传不同的数字和状态就可以, Compose里用column,Flutter里同样有这个东西,当然用listview 或其他的容器都可以。

child: Column(  children: [      _Number(1 , false,),      _Number(2 , false,),      _Number(3 , false,),      _Number(4 , false,),      _Number(5 , true,),  ],))

怎么使用Android Flutter实现创意时钟

为了美观可以切个圆角,这点compose的modifier就体现出了优势, 可以直接clip column,但Flutter却没那么强大,只能根据位置对每个小格子单独处理了。

if (number == 0) {  borderRadius = BorderRadius.only(      topLeft: Radius.circular(15), topRight: Radius.circular(15));} else if (number == (totalSize - 1)) {  borderRadius = BorderRadius.only(      bottomLeft: Radius.circular(15), bottomRight: Radius.circular(15));} else {  borderRadius = BorderRadius.all(Radius.zero);}
decoration: BoxDecoration(  color: backgroundColor,  borderRadius: borderRadius,),

或许还有其简单方式设置边角,请朋友提示。

怎么使用Android Flutter实现创意时钟

3.构建多列小格子

同理搞出六列格子,代表双位的时分秒,可以用row 包裹六个 column ,设置外层container的子widget都居中,接受当前时间作为状态,突出显示就可以了。 比如现在是21:49:15

怎么使用Android Flutter实现创意时钟

这样就画出了一个单独的静态时间刻度。

4.关于Align

这个图好像不太对,一种乱糟糟的感觉,需要能一眼看出当前时间才行,即把所有时间对齐在一条线上。

这方面Compose 发挥了优势, modifier的 offset 可以轻松实现位移。

val mid = (range.last - range.first) / 2f val offset = 40.dp * (mid - current)Modifier .offset(y = offset)

flutter 里貌似没这么方便了,怎么实现呢,我使用了Align组件,简单说明下, 以下摘自官方。

Align 组件可以调整子组件的位置,并且可以根据子组件的宽高来确定自身的的宽高,定义如下:

Align({  Key key,  this.alignment = Alignment.center,  this.widthFactor,  this.heightFactor,  Widget child,})
  • alignment : 需要一个AlignmentGeometry类型的值,表示子组件在父组件中的起始位置。AlignmentGeometry 是一个抽象类,它有两个常用的子类:Alignment和 FractionalOffset

  • widthFactorheightFactor是用于确定Align 组件本身宽高的属性;它们是两个缩放因子,会分别乘以子元素的宽、高,最终的结果就是Align 组件的宽高。如果值为null,则组件的宽高将会占用尽可能多的空间。

举例如下

Container(  height: 120.0,  width: 120.0,  color: Colors.blue[50],  child: Align(    alignment: Alignment.topRight,    child: FlutterLogo(      size: 60,    ),  ),)

怎么使用Android Flutter实现创意时钟

我显式指定了Container的宽、高都为120。如果我不显式指定宽高,而通过同时指定widthFactorheightFactor 为2也是可以达到同样的效果:

Align(  widthFactor: 2,  heightFactor: 2,  alignment: Alignment.topRight,  child: FlutterLogo(    size: 60,  ),),

5.对齐时间线

分析,Align实际上就是把原高度扩大为之前的 heightFactor 倍数,而它的子widget仍然处于Align的顶部,而当前时间点位于column顶部的距离是已知的,所以要让当前时间点的数字定位于 Align的中间 ,需要补齐(或截掉)当前时间点的格子下边的空间。 为了示意明确,我给总体背景和 Align 背景都加了颜色。

怎么使用Android Flutter实现创意时钟

第一列: 小时首位,只有三个格子, 当前是2, 2位于第三个,所以需要给下边补齐两个格子, 第二列:小时的末位,共有10个格子,当前数字也是2 ,也位于第三个,为了让上下相等,需要截掉4以下的数字,让2位于中间位置。

以此类推。

这下就可以发现规律了。 高度的系数因子为 :

(current * 2 + 1)/numbers.length

numbers.length 是列的长度。 因此, 每列的函数可以写为

_columnNumber(List<int> numbers, int current) {  List<Widget> list = [];  numbers.forEach((e) {    list.add(_Number(e, e == current, numbers.length));  });  return Container(    color: Colors.white,    child: Align(      alignment: Alignment.topCenter,      widthFactor: 1,      heightFactor: (current *2 + 1)/numbers.length,      child: Container(        height: numbers.length * _normalSize,        margin: EdgeInsets.only(left: 5, right: 5),        child: Column(          children: list,        )),    ),  );}

到此,关于“怎么使用Android Flutter实现创意时钟”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用Android Flutter实现创意时钟

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用Android Flutter实现创意时钟

这篇文章主要介绍“怎么使用Android Flutter实现创意时钟”,在日常操作中,相信很多人在怎么使用Android Flutter实现创意时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用And
2023-07-05

怎么使用JS实现电子时钟

本篇内容介绍了“怎么使用JS实现电子时钟”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码呈上:
2023-07-02

怎么使用Android Flutter实现弹幕效果

本篇内容介绍了“怎么使用Android Flutter实现弹幕效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言需求要点如下:弹幕行数为
2023-07-02

怎么使用JavaScript实现网页电子时钟

这篇文章主要讲解了“怎么使用JavaScript实现网页电子时钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JavaScript实现网页电子时钟”吧!如图就是一个简易的网页电子时钟
2023-07-02

Android怎么实现简单时钟View的方法

这篇文章给大家分享的是有关Android怎么实现简单时钟View的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过Canvas的平移与旋转简化绘图逻辑是一个非常有用的技巧,下面的时钟view就是利用这个方法
2023-05-30

Android Flutter怎么使用相机实现拍摄照片

本篇内容介绍了“Android Flutter怎么使用相机实现拍摄照片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用相机前的准备工作fl
2023-07-05

使用css3怎么实现一个LED 数字时钟

使用css3怎么实现一个LED 数字时钟?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语言
2023-06-08

怎么在Python下使用Pygame实现时钟效果

这篇文章主要讲解了“怎么在Python下使用Pygame实现时钟效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python下使用Pygame实现时钟效果”吧!本文实例为大家分享了P
2023-06-20

Android Flutter基于WebSocket怎么实现即时通讯功能

这篇文章主要介绍“Android Flutter基于WebSocket怎么实现即时通讯功能”,在日常操作中,相信很多人在Android Flutter基于WebSocket怎么实现即时通讯功能问题上存在疑惑,小编查阅了各式资料,整理出简单好
2023-06-29

怎么用原生js实现电子时钟

这篇文章主要介绍“怎么用原生js实现电子时钟”,在日常操作中,相信很多人在怎么用原生js实现电子时钟问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用原生js实现电子时钟”的疑惑有所帮助!接下来,请跟着小编
2023-07-02

android高仿小米时钟(使用Camera和Matrix实现3D效果)

继续练习自定义View。。毕竟熟才能生巧。一直觉得小米的时钟很精美,那这次就搞它~这次除了练习自定义View,还涉及到使用Camera和Matrix实现3D效果。一个这样的效果,在绘制的时候最好选择一个方向一步一步的绘制,这里我选择由外到内
2022-06-06

怎么在Html5中使用canvas实现一个粒子时钟

这篇文章将为大家详细讲解有关怎么在Html5中使用canvas实现一个粒子时钟,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先要创建一个html文件并添加一个canvas画布,如下:
2023-06-09

Flutter怎么使用AnimatedBuilder实现动效复用

这篇文章主要介绍“Flutter怎么使用AnimatedBuilder实现动效复用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么使用AnimatedBuilder实现动效复用”文章
2023-06-29

Android中怎么使用flow实现倒计时

本篇内容主要讲解“Android中怎么使用flow实现倒计时”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中怎么使用flow实现倒计时”吧!现在因为有了协程和Flow,我们可以借助
2023-06-30

怎么使用Flutter+Metal实现图像处理

这篇“怎么使用Flutter+Metal实现图像处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Flutter+M
2023-07-02

C++怎么使用easyx画实时走动的钟表

今天小编给大家分享一下C++怎么使用easyx画实时走动的钟表的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。这次的任务是用c
2023-06-30

Flutter中怎么使用AnimatedOpacity实现图片渐现动画

今天小编给大家分享一下Flutter中怎么使用AnimatedOpacity实现图片渐现动画的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起
2023-06-29

Android常用定时器怎么实现

Android常用的定时器实现有以下几种方式:1. 使用Handler和Runnable实现定时器:```java// 创建Handler对象Handler handler = new Handler();// 创建Runnable对象Ru
2023-08-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录