重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

flutter专题,简书 flutter

Android自定义View之区块选择器

先来看下效果吧:

创新互联公司专注于点军企业网站建设,成都响应式网站建设公司,商城网站制作。点军网站建设公司,为点军等地区提供建站服务。全流程按需搭建网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

我们来分析这个view需要实现哪些效果。

别害怕有这么多的功能,我们一个一个来实现。首先是刻度尺,这个简单。由于完整的刻度尺是比屏幕宽度大的,因此我们先来了解几个概念:

这里手机屏幕的宽度是width,刻度尺的宽度的时maxWidth,我们其实只需要绘制手机屏幕可见的部分就可以了,这里的offset表示手机屏幕的左边与刻度尺左边的偏移量。

了解了这个概念,我们就来开始写吧,定义一个View,处理下构造都指向3个参数的那个,然后统一做初始化:

我们在onMeasure中处理了wrap_content的高度。然后在onSizeChanged中获取尺寸参数:

接着就开始绘制吧:

这里的titles代表了刻度的标识,每一个元素代表一个刻度(这里我字节写死了,实际上可以通过方法set,也不一定是时间,能代表刻度的都可以)。通过rate设置长短刻度的比例,这里我设置了1:1。运行一下看看,目前仅仅能看到从0开始,看不到完整的刻度尺,我们需要实现touch事件产生移动才有效果。

我们重写onTouchEvent来实现滑动效果:

我们计算出每次move事件的X方向的变化量dx,然后通过这个dx改变offset,并且处理一下边界的情况。然后调用postInvalidate刷新界面。

运行一下看看!现在我们可以滑动刻度尺了。但是好像还有点问题,平时我们使用ScrollView的时候用力划一下,可以看到手指离开了屏幕,但是内容还可以继续滚动。而目前我们自定义的这个view只能通过手指滑动,如果手指离开屏幕就不能滑动了。这样的体验显然不够好,我们来实现这个惯性滑动的效果吧!

要实现惯性滑动,我们需要用到两个类:VelocityTracker,OverScroller。

VelocityTracker简介

view滑动助手类OverScroller

velocityTracker.computeCurrentVelocity方法的第二个参数表示最大惯性速度,这里我设置8000,避免刻度尺过快的滑动。通过调用scroller.fling方法将计算出的速度交给scroller,然后在computeScroll方法中获取当前值,并与上一次的值做差算出变化量dx,同样用这个dx变化offset刷新界面实现滑动效果。

刻度尺完成了,接下来是不可选的灰色区域。我采用两个int值表示在刻度尺的区域,刻度尺的每个刻度表示一个最小单位,前一个int表示在刻度尺的起始位置,后一个int表示占据的刻度数量。

我用一个list存放设置的不可选区域,然后在另一个list中存放转换成RectF的位置信息。这里的RectF是在相对于整体刻度尺而言的,因此绘制到屏幕的时候需要减去offset,并且需要考虑只有部分在屏幕可见的情况。避免在onDraw方法中创建过多临时变量,我声明一个成员变量tempRect,用来保存绘制时的临时参数。

完成了不可选区域,可选区域也是同样的。由于只能有一个可选区域,我们只需要定义一个RectF。额外需要考虑与不可选区域相交时会变色,我定了一个overlapping表示是否相交,通过RectF的intersects方法判断。

通过前面的分析,我们知道这个view中的事件有很多种:点击,移动刻度尺,移动选中区域,扩展选中区域。我们定义这四种类型便于后续的事件处理:

然后改造一下onTouchEvent:

performClick会在你重写onTouchEvent时as提示你需要重写的方法,因为你可能没有考虑到如果给这个view设置OnClickListener的情况。如果你没有在onTouchEvent中调用performClick,那么setOnClickListener方法就失效了。

你可能注意到这一次比较复杂,并且还有一个linking字段,表示是否正在联动,我解释一下这个联动的概念:通过gif其实你可能注意到,当我移动或者扩展选中区域的时候,如果移动到了屏幕的边界,后面的刻度尺就会跟着移动,实际上这个时候选中区域在屏幕中的位置没有改变,只是刻度尺移动了。一开始我也是通过dx来改变offset,但是存在一个问题,移动到屏幕边缘之后,手指可以移动的区域已经很小了,不会产生足够的dx(手指不移动的话,不会有新的touch事件产生)。最好的体验是我把手机移动到屏幕边缘,刻度尺就会自己按照一定的速率移动直到最大offset或者最小offset。于是我使用了Handler,当满足条件后发送消息,表示开始进行联动,会按照固定速度产生一个dx改变offset。当然,在离开屏幕边缘的时候还需要及时取消handler的任务。

至此,功能基本已经实现了,运行一下看看效果吧~

后面需要做什么那?现在这个view只能自己玩,我需要它与其他view有交互,比如选中什么区域,状态的改变生么的。

声明两个接口,并在适当时候回调它们的方法,这样外部就能感知view的状态变化。

后面的话就是根据业务添加一些api了,例如添加不可选区域,改变刻度范围什么,一切都看需求了。

想学习更多Android知识,或者获取相关资料请加入Android开发交流群:1018342383。 有面试资源系统整理分享,Java语言进阶和Kotlin语言与Android相关技术内核,APP开发框架知识, 360°Android App全方位性能优化。Android前沿技术,高级UI、Gradle、RxJava、小程序、Hybrid、 移动架构师专题项目实战环节、React Native、等技术教程!架构师课程、NDK模块开发、 Flutter等全方面的 Android高级实践技术讲解。还有在线答疑

web前端培训有哪些课程

第一阶段 网页重构:HTML+CSS核心技术、PC端网站布局、HTML5+CSS3核心技术、移动端网站布局、响应式布局实战

第二阶段 JS高级程序设计:JavaScript核心技术-网站动效交互、JavaScript核心技术-网站前后端交互、jQuery交互效果开发

第三阶段 NodeJS前端架构及后台开发:版本控制工具、NodeJS核心技术

第四阶段 前端框架:Vuejs全家桶-Vue、React框架-React、微信小程序、Flutter

第五阶段 小程序开发:能够独立开发小程序,提高就业能力,是就业的加分项。

节奏用英语怎么说

节奏不仅限于声音层面,景物的运动和情感的运动也会形成节奏。那么,你知道节奏的 英语单词 怎么说吗?现在跟我一起学习关于节奏的英语知识吧。

节奏的英文释义

(n) musical rhythm

(n) cadence; tempo

rhythm

cadence

swing

节奏的英文例句

我喜欢节奏快的音乐。

I like fast music.

心律失常不规则的心跳强度或节奏

An irregularity in the force or rhythm of the heartbeat.

过度的睡眠会使你的自然节奏被打乱并导致昏昏沉沉。

Oversleeping disrupts your natural rhythm and leads to grogginess.

在自家前厅待着与在一间办公室待着,这是两种不同的生活节奏。

The pace of life is different in my front room than it is in an office.

广播节目本身需要节奏和风格。

The broadcasts themselves require pacing and style.

这种有节奏的叫喊在感情冲动压倒一切的时候是常常会听到的。

It was a refrain that was often heard in moments of overwhelming emotion.

那些年轻人喜欢她唱的那些节奏强劲的歌。

The young kids like the songs swung by her.

你的心跳非常有节奏…

Your heart beats with a steady rhythm.

优秀的 游泳 者能够协调游泳动作和呼吸节奏。

Good swimmers coordinate their breathing with their strikers.

他们为跳舞者敲出节奏。

They drummed a rhythm for dancers.

她在小提琴上奏出明快的节奏。

She rippled a lively rhythm on the violin.

当今,随着科技进步,生活节奏不断增快。

Today, the pace of life is increasing with technological advancements.

乐队正在为跳舞者敲出节奏。

The band are drumming a rhythm for dancers.

节奏的英语 句子 带翻译

当你一次又一次的拨出电话你将会进入一种节奏,每次打完你将会感觉更轻松同时更快的去完成剩余的工作.

As you do one call after one another you will get into the rhythm of it and everycall will feel easier and be completed faster.

在那次意外的聚会中,在这个浩瀚的行星上,我前所未有地感觉到了与生命的节奏是如此地协调。

During that unexpected rendezvous, I felt more in tune with the rhythms of life onthis vast planet than I ever have.

这样在看电影的时候你就处在一个非常超前的地位,这份自信来自你对影片内部节奏的了解。

And so you go very far on a journey with that film because the inner rhythms of the film give you that confidence.

问:举一个这些致命的非正常心跳节奏的一个例子?

Q: What is an example of one of these deadly heart rhythms?

相关的一点是关于个人成长的节奏,我们为自己确定,考虑到我们自己和我们的婚姻服务。

A related point concerns the personal growth rhythm we set for ourselves, to takecare of ourselves and our marriages.

所以,我们就是音乐,我们自然地按照自己的节奏与循环创造出音乐。

So, we are music, we create music very naturally out of our own rhythms andcycles.

为了让你的横膈膜和你的脚步的节奏相配,你可以试着在你每次左脚落地的时候进行吸气和呼气。

To get the diaphragm to contract in rhythm with your steps, try to inhale andexhale as you land on your left foot.

在其他的统计数据上也能看出这两场战争中的节奏变化。

The changing tempos of the two wars can be seen in other statistics, as well.

这种 方法 让团队找到自己的节奏,然后用其现实世界中的 经验 对未来的迭代进行预测。

This approach allows the team to find its rhythm and then use its experience in the real world to predict future iterations.

每个学生有一个不同的混合的智力类型,其中是不同的学习和节奏型。

Every student has a different blend of intelligence and within that a differentlearning style and pace.

稳定可控的呼吸,让心跳与身体其他器官的节奏协调起来。

Steady, controlled, in harmony with your heartbeat and the rhythms of your otherorgans.

音乐的节奏让每个人听了都不禁想随之起舞。

The rhythm of the music made everyone want to dance.

这本书里另一个关于孩子鉴定的重要影响是一天中家庭成员共同经历的正常节奏。

Another important influence on children identified in this book concerns thenormal rhythms of the day that families together experience.

我今天听音乐的时候,她跟着节奏挥舞着自己的小手。

When I listened the music today, she waved her hands with the rhythm.

他当时完全被音乐迷住了,随着音乐的节奏晃动着肩膀,可同时又没忘了问我中东 文化 对弗拉门戈的影响。

He was enthralled by the music, swaying his shoulders to the rhythm, while at the same time asking me about the Middle Eastern influences on flamenco.

那天沉浸在蜜蜂、花儿、海洋和陆地的沉寂之中,但是并不单调,骚动,起伏,翻转,上升,下降,每一种都在自己的时间里以无与伦比的节奏发生着。

It was a day compounded from silences of bee and flower and ocean and land, which were not silence at all, but motions, stirs, flutters, risings, fallings, each in its own time and matchless rhythm.

猜你喜欢:

1. 招商用英语怎么说

2. 节奏是什么意思

3. 纯音乐用英语怎么说

4. 节奏用英语怎么说

5. 固定用英语怎么说

6. 专题用英语怎么说

iOS 14 小组件(1):WidgetExtension 创建及报错详解

iOS 14 中新增了 WidgetExtension,用来取代之前的 TodayExtension。相比以前的 Widget 这一次的小组件不可谓是坑不多,特别是集成在之前毕竟庞杂的工程中,奇奇怪怪的报错和不兼容就出来了。网上帖子更多的还是新建一个工程,然后走一遍流程,这个不难理解,这里我把我在项目工程中集成 WidgetExtension 遇到的坑给大家捋一捋。

另外和以前的 Widget 最大的不同就是,Widget Extension 只支持 SwiftUI。

PS:最近一直在写 flutter 文章,有兴趣的可以关注专题 我的 Flutter 专题 。

打开 File - New - Target - Widget Extension。然后创建一个,注意名字最好不要用 Widget,后边第6条会讲这地方的坑。

看的教程可能一切顺利,但是可能你打开页面就是这样的一片夕阳红,这里就是工程环境问题了。

解决方案如下,将 PROJECT 的 iOS Development Target 改为 14.0。注意是工程,不是 TARGETS。

SwiftUI 的预览功能报错,这个需要更改 Build System,算是常见错误了。

打开 File - Project Setting / WorkSpace Setting - Build System - New Build System。

这个真的是最最最最最恶心的报错了,找了一整天,也没啥头绪的,理论上和这个 Widget Extension 没有半毛钱关系的东西竟然能跑不起来。

当然如果自己工程没有 Class Prefix 自然不用关心这个,也不会出现报错。

删除 Class Prefix 就行了。

前边有提到尽量不要用 Widget 作为 Widget Extension 的命名,在这里会有一个简单的报错,生成的 demo 中,你的命名 : Widget 会有这么一个类,如果你使用 Widget 命名,就会和父类重名,然后报错。

解决方案就给 struct 改个名字就好了,文件名不用改的。

放在一起篇幅就比较长了,自定义 UI 就另开一篇来讲解了,这里先上几张效果图。

做混合的话Uniapp和Flutter我应该学哪个啊?

Uniapp目前比较成熟,而且用的是Vue语法,学习成本比较低,而且行业里面用的也比较广泛,而Flutter的话,学习成本略高,因为要学习新的语言,还有就是目前生态不是特别完备,等他再发展发展吧。黑马程序员官网有成套免费视频哦,有什么不懂的可以直接过去学习。您的采纳是对我成长的鞭策


分享文章:flutter专题,简书 flutter
本文链接:http://cqcxhl.com/article/dsishih.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP