zoukankan      html  css  js  c++  java
  • android--WaveView(波浪形View) 的实现记录

    背景

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

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

    思路

    当我第一次看见这个效果的时候,我的第一个想法是:如果是静态的时候是什么样子的!好,再来张图
    图片
    看到这儿,大家有可能想到了 这不就是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() 方法!

    图

    最后附上所有代码图

    讲解结束!!

  • 相关阅读:
    关闭防火墙,仍然无法访问80端口 centos
    apache添加虚拟主机(windows下)
    PHP实现文件下载
    chmod 777 修改权限之后,文件夹颜色变绿:解决方案
    element ui table(表格)点击一行展开
    vue中eventbus 多次触发的问题
    console.log、toString方法与js判断变量类型
    另一个维度:cocos-2d VS vue
    浏览器内置的base64方法
    H5网页涂鸦canvas
  • 原文地址:https://www.cnblogs.com/likeandroid/p/4480344.html
Copyright © 2011-2022 走看看