1. 最近把公司智能家具类的应用中的一个负离子净化显示的控件重写了,干脆就封装了一下起个高大上的名字空气净化器控件,感觉比负离子净化牛逼一点,好像最近锤子也发布了一个空气净化器。

  1. 再来个动态的(Gif效果好差没办法它限制5M大小了,真实效果:扇叶是减速运动的),还是看后面吧

  1. 一共才写了几个篇博客,没经验啊,看了下别人的都写原理什么的,这次就写一下里面相当比较复杂的效果的,其实,,,,没什么复杂的,不知道从何说起捡几个用于的说。

1. 实现的功能 (注意以思路为主)

  • 1. 改变上中下字体大小,字体信息
  • 2. 背景颜色实现渐变切换
  • 3. 实现扇叶无缝开启和关闭,从上次结束的位置开始动画
  • 4. 实现颗粒物效果
  • 5. 无缝改变扇叶的速度
  • 6.实现扇叶的渐变显示,更加真实

2. 实现扇叶的渐变 (类似于真实扇叶的卷起来效果)

扇叶对比


  1. 简单说下这个的实现,其实实现虚线画圆真心简单两行代码解决。
// kotlin版 java也是一样就是设置一下绘制效果就可以绘制虚线圆
val pathEffect = DashPathEffect(floatArrayOf(mPaint.strokeWidth*0.4f,mPaint.strokeWidth),0f)
mPaint.pathEffect = pathEffect
canvas.drawCircle(dashedRingCx,dashedRingCy,dashedRingRadius,mPaint)
  1. 但是 渐变的怎么绘制呢?上面的方法就不能用了,因为Android绘制渐变的我想到的只有LinearGradient,我说的是一个个绘制渐变,先说下我的方法,LinearGradient需要传入好几个参数其中这里比较重要的就是x0,y0,x1,y1,就是你需要从那个点渐变到那个点,直接再上个图标就是求出图中两个就可以绘制一个渐变的小圆环了,然后怎么绘制一个圆弧了。
// kotlin版 java也是一样//实现渐变扇叶
while (curAngle < 360 - mEachPanAngle) {val x0 = measuredWidth/2f + (Math.cos((curAngle)*Math.PI/180)*(dashedRingRadius-dashedRadiusDiff*0.5)).toFloat()val y0 = measuredHeight/2f + (Math.sin((curAngle)*Math.PI/180)*(dashedRingRadius-dashedRadiusDiff*0.5)).toFloat()val x1 = measuredWidth/2f + (Math.cos((curAngle+mEachPanAngle)*Math.PI/180)*(dashedRingRadius+dashedRadiusDiff*0.5)).toFloat()val y1 = measuredHeight/2f + (Math.sin((curAngle+mEachPanAngle)*Math.PI/180)*(dashedRingRadius+dashedRadiusDiff*0.5)).toFloat()val shader = LinearGradient(x0, y0, x1, y1, Color.parseColor("#22ffffff"), Color.parseColor("#ffffffff"), Shader.TileMode.CLAMP)mPaint.shader = shadercanvas?.drawArc(rectF, curAngle, mEachPanAngle, false, mPaint)curAngle = curAngle + mEachPanAngle + mEachPanAngleGap
}
mPaint.shader = null //记得清除

3. 实现的渐变背景

这个的实现方法就很多了可以直接属性动画一个起始值一个结束值,设置animator.setEvaluator(ArgbEvaluator()),还有一个就是使用Hsv 使颜色渐变更适合人类观感,公式就不写,网上有源码里也有。

4. 实现扇叶无缝开启和关闭

这个动画还是使用属性动画,但注意每次开启和关闭时传入的值,当前值为起始值,结束值为你要到的值,代码其实很简单。

“` java

private fun onFanAnim(isOpenFan: Boolean) {
if (mJumpAnimator != null && mJumpAnimator!!.isRunning) {
mJumpAnimator!!.cancel()
}
if (isOpenFan) {
mJumpAnimator = ObjectAnimator.ofFloat(this,”dashedRadiusDiff”,dashedRadiusDiff,mDashedRingWidth)
mJumpAnimator!!.interpolator = DecelerateInterpolator()
mJumpAnimator!!.addListener(object : Animator.AnimatorListener{
override fun onAnimationRepeat(p0: Animator?) {
}
override fun onAnimationEnd(p0: Animator?) {
if (!isCancelJumpAnim) {
mPanListener?.onHasOpen()
onRotateAnim()
}
isCancelJumpAnim = false
}
override fun onAnimationCancel(p0: Animator?) {
isCancelJumpAnim = true
}
override fun onAnimationStart(p0: Animator?) {

            }})mJumpAnimator!!.duration = 2000} else {mJumpAnimator = ObjectAnimator.ofFloat(this,"dashedRadiusDiff",dashedRadiusDiff,0f)mJumpAnimator!!.interpolator = AccelerateInterpolator()mJumpAnimator!!.addListener(object : Animator.AnimatorListener{override fun onAnimationRepeat(p0: Animator?) {}override fun onAnimationEnd(p0: Animator?) {if (dashedRadiusDiff == 0f) {mPanListener?.onHasClose()}}override fun onAnimationCancel(p0: Animator?) {}override fun onAnimationStart(p0: Animator?) {}})mJumpAnimator!!.duration = 1200}mJumpAnimator!!.start()
}

“`

5. 实现颗粒物效果

  • 1.实现颗粒物无方向飘动
  • 2.顺时针向圆心运动就是实现被设备吸入效果


这个实现方法非常多我实现方法应该是比较简单的,但效果不是特别符合空气效果,颗粒物实现了两个效果一个随机流动还有一个随着扇叶渐变到,1.无方向浮动是每次刷新都进行加一个随机 -0.5 ~ 0.5数字 2.被设备吸入的效果使用角度增加,半径减小是不是很简单。

6. 无缝改变扇叶的速度 (GIF效果不太好)

这个实现过程更简单了每次改变动画的时间但要记住起点是上一次动画结束点,终点是结束点+360

7 .必须人工解释一下这个GIF效果实现是1.每个进度端实现颜色的渐变 2.就是变速了,当数字比较大的时候转的快点,随着进度减小慢慢减速,最后关闭设备效果,这个图转快了就和没转转一样。

8. 源码地址

9. GitHub

10. 如果有问题可以提出,我有时间就改进, 后续使用过程中有问题,也会进行更新。。。

炫酷的空气净化器控件 - AirPurgeLayoutView相关推荐

  1. 【转】WPF从我炫系统5---基本控件的用法

    今天我来给大家讲解WPF中一些基本控件的用法,所谓基本控件,就是我们最常用用到的一些控件,通过这一节的讲解,大家会对WPF中的控件的用法有一个更深入的了解. 1.       基本控件 LABEL控件 ...

  2. 【转】WPF从我炫系列4---装饰控件的用法

    在这一节的讲解中,我将为大家介绍WPF装饰控件的用法,主要为大家讲解一下几个控件的用法. ScrollViewer滚动条控件 Border边框控件 ViewBox自由缩放控件 1. ScrollVie ...

  3. 【转】WPF从我炫系列3---内容控件的用法

    今天我来给大家讲解WPF中内容控件的用法,在WPF中的内容控件,通俗的讲,是指具有Content属性的控件,在content属性里面可以嵌套放置任意其他类型的控件,但是Content只能接受单个元素, ...

  4. 【转】wpf从我炫系列2----布局控件的使用(下)

    4.        GRID控件 Grid控件可以是说是wpf中功能最强大和使用最多的控件.它有点类似于HMTL网页布局中的表格,可以自定义行列显示,并可以合并某些行和列. 使用<Grid.Ro ...

  5. 【转】wpf从我炫系列1----布局控件的使用(上)

    今天我来给大家讲解在学习WPF过程中使用布局控件的一些心得,主要给大家介绍一下一个控件的用法.希望对大家学习Wpf有所帮助. 1.       StackPanel栈面板 2.       WrapP ...

  6. android酷狗下拉,Android 仿酷狗滑动控件实现 流畅运行

    最近又浏览了一遍github上的开源项目,有感于大神们的强大,所以想搞搞像kugou那样左右滑动的侧滑菜单控件. 打开移动设备的kugou软件,看了下整体效果,就知道了,我们要实现一个左侧主页,右侧菜 ...

  7. android 根据bounds坐标进行点击操作_炫酷的Android时钟UI控件,隔壁产品都馋哭了...

    废话不多说,先上效果效果酷炫,动画丰富,效果爆炸boom-设计思路看腻了市面上各种丑陋难看的时钟控件,是时候整点新活!将现实生活中的摆钟圆形表盘设计.电子手表的数显表盘设计抽象出来,提取出" ...

  8. GitHub开源推荐 | 炫酷的Material风格Qt控件

    作者: 一去.二三里 个人微信号: iwaleon 微信公众号: 高效程序员 Google 推出的 Material Design,无论是视觉效果还是交互体验都很棒,我们平时在上网时,在绝大多数的网页 ...

  9. .NET Framework 3.5 SP1的图表控件——Chart (转)

    基于.NET Framework 3.5 SP1的图表控件--Chart,可 在WinForm和WebForm下使用!并同时提供了大量的示例 官方主页:http://code.msdn.microso ...

最新文章

  1. QT 中使用 OpenCv 的 CascadeClassifier 报错
  2. Gastroenterology:住院期间COVID-19患者肠道菌群的变化
  3. FreeTextBox的ToolbarButton整理
  4. iOS快速开发框架Bee-Framework应用和解析(二) - Bee framework架构概览
  5. Android SoundPool 的简单使用
  6. 字典 dictionary c# 0104
  7. Open3D绘制3D坐标,绘制点云
  8. win10升级补丁_官方win10教育版怎么样
  9. 这件小事,我坚持了 200 天
  10. relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol may bind externally can not be used 【ARM64平台编译】
  11. 安装NET.FRAMEWORK报错:error 25015安装法度集 C:\Windows\Microsoft .NET\Framework\v2.0.50727\xxx.dl...
  12. Two Arrays And Swaps
  13. 【图数据库】GalaxyBase 查询优化之索引
  14. 【Linux command 06】zip命令 – 压缩文件
  15. 《Qt Quick核心编程》勘误
  16. 大数据技术原理——期末复习storm
  17. 五一培训 清北学堂 DAY2
  18. C语言随机点名器程序
  19. Netkiller Developer 手札之前言
  20. 【独家】生死时速:中国私有云格局大裂变

热门文章

  1. 抖动同城的系统如何配置呢?
  2. spark之OOM常见问题梳理(一)
  3. oracle 三步运算符,ORA-01476: 除数为 0
  4. c语言菜鸟在线编译器,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  5. dibea地贝扫地机器人怎么样_地贝扫地机器人怎么样—地贝扫地机器人的特点介绍...
  6. SQL SERVER数据库中GUEST用户
  7. h5新增标签及css3新增属性
  8. 为什么C语言的strcpy函数有漏洞(转)
  9. Java学习笔记一Tomcat 8.5 的WebSocket 支持
  10. powershell 使用_如何使用PowerShell映射网络驱动器