背景

请假回家当伴郎,由于实在无聊,就写下了此篇博客!!按照惯例,先上动态图

怎么样!效果比较赞吧!!!

思路

当我第一次看见这个效果的时候,我的第一个想法是:如果是静态的时候是什么样子的!好,再来张图

看到这儿,大家有可能想到了 这不就是sin函数吗?对,不错,就是sin函数!!!
那怎么能实现这张静态图呢?我的思路是这样的:sin函数在我看来就是在x轴数据集合固定的时候,y轴对应数据的集合!那么x轴数据的集合是多少呢?请大家在看一下上图!不就是view的宽度吗!我们以每刻度为1,那么这个x轴的数据集合不就是[0,viewwidth]吗?此时我们只要代入sin函数中不就能求得y轴数据的集合了吗!!好大家先看下代码:

现在求的y轴数据的之后,想要画出那张静态图,就比较简单了!其实我们只要画viewwidth条垂直与x轴的直线就行了!那么怎么出现曲线状态呢!其实这些直线的高度不一样的。那这些高度是怎么求出来的呢?就是我们用一个固定高度减去刚才求的y轴的值!
接下来大家看代码就知道了

从代码中大家可以看到我们总共绘制了viewwidth条直线。

至此,静态图就已经绘制OK了!!

那么,怎么绘制动态图?聪明的小伙伴,可能已经想到了!就是不停的变幻y轴的值就行了!相信大家已经看到,我们是把y轴的值存放到数组中的!!我们只要按照一定的规律移动数组中数据的位置就行了!那么我们该怎么移动的?

1.首先我得先定义个另外个数组用来存这些变化的数据。同时规定好了变化的量!!在这之前,大家得先了解这个函数 System.arraycopy() (不懂的,自己百度去!!)

2.现在就是剩下每隔一段时间绘制啦!我们直接看整个 ondraw() 方法!

最后附上所有代码图

讲解结束!!

android--WaveView(波浪形View) 的实现记录的更多相关文章

  1. Android开发技术周报183学习记录

    Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...

  2. 【Android自己定义View实战】之自己定义超简单SearchView搜索框

    [Android自己定义View实战]之自己定义超简单SearchView搜索框 这篇文章是对之前文章的翻新,至于为什么我要又一次改动这篇文章?原因例如以下 1.有人举报我抄袭,原文链接:http:/ ...

  3. Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)

    Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...

  4. 1.Android 视图及View绘制分析笔记之setContentView

    自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...

  5. Android读取自定义View属性

    Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...

  6. android中实现view可以滑动的六种方法续篇(二)

    承接上一篇,上一篇中讲解了实现滑动的第五种方法,如果你还没读过,可点击下面链接: http://www.cnblogs.com/fuly550871915/p/4985482.html 这篇文章现在来 ...

  7. 15.Android中LinearLayout布局一些小记录

    在App中,我们经常看到布局中会有分割线,直接上代码: <?xml version="1.0" encoding="utf-8"?> <Lin ...

  8. Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow

     Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题.通常在Andro ...

  9. Android Touch(3)View的touchDelegate

    作用: 基类View有个函数 public void setTouchDelegate(TouchDelegate delegate),给view内部的另一个view设置一个touch代理. 图中vi ...

随机推荐

  1. 泛型Where T 说明

    约束 说明 where T : struct 对于结构约束,类型 T 必须是值类型 where T : class 类约束指定类型 T 必须是引用类型 where T : IFoo 指定类型 T 必须 ...

  2. ubuntu卸载第三方库

    下面以pcl和opencv为例进行说明. 参考资料: https://www.cnblogs.com/txg198955/p/5990295.html  ubuntu卸载opencv并重装opencv ...

  3. Mysql报错......\xE6\x80\xBB\xE7\x9B\x91' for column...

    Mysql添加表中字符报错:Incorrect string value: '\xE6\x80\xBB\xE7\x9B\x91' for column 'postName' at row 1 原因:字 ...

  4. lucene示例

    搭建环境 搭建Lucene的开发环境只需要加入Lucene的Jar包,要加入的jar包至少要有: lucene-core-3.0.1.jar(核心包) contrib\analyzers\common ...

  5. 转载:linux系统下SVN同步文件到WEB目录

    SVN在团队开发中使用非常普遍,是一个很方便的版本控制系统.  如果要是能将SVN服务器上的数据自动发布到Web服务器,那将是整个项目开发.测试更加便捷.利用SVN的hook功能就能实现将SVN服务器 ...

  6. xpath的基础实例

    本文分为路径表达式和常用函数两部分,整理自火车浏览器官方教程-火车浏览器之Xpath讲解. 小提示:可以使用火狐浏览器.我用的是火狐浏览器+firebug+firepath来进行调试,调试界面是这样的 ...

  7. AOP - PostSharp 2.0

    PostSharp是一个非常优秀的AOP框架,使用上非常方便,功能强大,对目标拦截的方法不需要做什么修改,但现在已经商业化运作从PostSharp官方网站下载一个试用版,安装 简单示例PostShar ...

  8. pandas drop_duplicates

    函数 : DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) 参数:这个drop_duplicate方法是对Data ...

  9. python学习之strip()

    定义: Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 语法: str.strip([chars]); 返回值: 返回移除字符串头尾指定的字符生成的新字符串. 例子: ...

  10. struts解决form提交的中文参数乱码问题

    根据struts的工作原理,原文摘自<Java Web 开发实战经典> 在运行一个JSP页面前,会调用指定的ActionForm中的reset()方法,进行表单元素的初始化 因此,在相应的 ...