先上图:

第一步,先定义画笔工具,行高,和标题

private String[] title = new String[]{"清醒","浅睡","中睡","深睡"};
private Paint mPaint = null;
private Paint mSoberPaint = null;//清醒
private Paint mLightSleepPaint = null;//浅睡
private Paint mMiddleSleepPaint = null;//中睡
private Paint mDeepSleepPaint = null;//深睡
private List<Paint> mPaintList = null;
private float sleepHeigh = 0;
private float sleepWidth = 0;

模拟数据

/*** 睡眠等级从0-7* 0-1 清醒* 2-3 浅睡* 4-5 中睡* 6-7 深睡*/
private String mSleepData = "777722222226666666633333333332222222111111115555555666666677777775552222222333333322211111111115556666444444" +        "777722222226666666633333333332222222111111115555555666666677777775552222222333333322211111111115556666444444" +        "777722222226666666633333333332222222111111115555555666666677777775552222222333333322211111111115556666444444" ;

第二步,初始化画笔

sleepHeigh = getResources().getDimension(R.dimen.sleep_height);mPaint = new Paint();
//设置抗锯齿
mPaint.setAntiAlias(true);
//设置是否抖动
mPaint.setDither(true);
//这个是文本缓存,设置线性文本,如果设置为true就不需要缓存,
mPaint.setLinearText(false);
mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setColor(getResources().getColor(R.color.sleep_color_bg));//清醒
mSoberPaint = new Paint();
setPaint(mSoberPaint);
mSoberPaint.setColor(getResources().getColor(R.color.sober_color));//浅睡
mLightSleepPaint = new Paint();
setPaint(mLightSleepPaint);
mLightSleepPaint.setColor(getResources().getColor(R.color.light_sleep_color));//中睡
mMiddleSleepPaint = new Paint();
setPaint(mMiddleSleepPaint);
mMiddleSleepPaint.setColor(getResources().getColor(R.color.middle_sleep_color));//深睡
mDeepSleepPaint = new Paint();
setPaint(mDeepSleepPaint);
mDeepSleepPaint.setColor(getResources().getColor(R.color.deep_sleep_color));mPaintList = new ArrayList<>();
mPaintList.add(mSoberPaint);
mPaintList.add(mLightSleepPaint);
mPaintList.add(mMiddleSleepPaint);
mPaintList.add(mDeepSleepPaint);

第三步,画上下边框

//画上边框背景
mPaint.setColor(getResources().getColor(R.color.sleep_color_bg));
canvas.drawLine(0,0,getWidth(),0,mPaint);
//内线
mPaint.setColor(getResources().getColor(R.color.sleep_color_within_bg));
canvas.drawLine(0,sleepHeigh,getWidth(),sleepHeigh,mPaint);
canvas.drawLine(0,sleepHeigh*2,getWidth(),sleepHeigh*2,mPaint);
canvas.drawLine(0,sleepHeigh*3,getWidth(),sleepHeigh*3,mPaint);
//画下边框背景
mPaint.setColor(getResources().getColor(R.color.sleep_color_bg));
canvas.drawLine(0,sleepHeigh*4,getWidth(),sleepHeigh*4,mPaint);

第四步,画睡眠数据

//画字
for (int i= 1;i<=4;i++){String text = title[i-1];mPaint.getTextBounds(text, 0, text.length(), rect);canvas.drawText(text,getWidth()-rect.width(),sleepHeigh*i-5,mPaint);
}//睡眠结果
sleepWidth = (float) getWidth()/ mSleepData.length();
for (int i = 0; i < mSleepData.length(); i++){int v = Integer.parseInt(String.valueOf(mSleepData.charAt(i)));int sleepState = v/2;canvas.drawRect(sleepWidth*i, sleepHeigh*(sleepState+1),sleepWidth*(i+1), sleepHeigh*sleepState, mPaintList.get(sleepState));// 长方形
}

文章源码下载地址:睡眠监测自定义view-Android代码类资源-CSDN下载

关于睡眠检测自定义VIEW相关推荐

  1. Android自定义View,滑动,事件传递小结

    本文只总结知识点 欢迎补充,欢迎纠正.谢谢! #预备知识 Android控件框架 ####1. View树状图 Android的View树结构总是以一个ViewGroup开始,包含多个View或Vie ...

  2. 【Android 应用开发】自定义View 和 ViewGroup

    一. 自定义View介绍 自定义View时, 继承View基类, 并实现其中的一些方法. (1) ~ (2) 方法与构造相关 (3) ~ (5) 方法与组件大小位置相关 (6) ~ (9) 方法与触摸 ...

  3. Android中实现Bitmap在自定义View中的放大与拖动

    一基本实现思路: 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对MotionEvent事件的监听与处理 ...

  4. 自定义View:测量measure,布局layout,绘制draw

    1. 什么是View 在Android的官方文档中是这样描述的:表示了用户界面的基本构建模块.一个View占用了屏幕上的一个矩形区域并且负责界面绘制和事件处理. 手机屏幕上所有看得见摸得着的都是Vie ...

  5. Android开发自定义View

    Android中View组件的作用类似于Swing变成中的JPanel,它只是一个空白的矩形区域,View组件中没有任何内容.对于Android应用的其他UI组件来说,它们都继承了View组件,然后在 ...

  6. Android零基础入门第24节:自定义View简单使用

    Android零基础入门第24节:自定义View简单使用 原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义Vi ...

  7. android 自定义view实现拖动放大缩小_自定义itemCheckView

    阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 自定义View类实现 自定义View标签 ...

  8. Android自定义滑动进度条,Android自定义View实现圆形水波进度条

    每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...

  9. android canvas_Android 自定义View篇(七)实现环形进度条效果

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

最新文章

  1. 查看依赖树_Python中的依赖关系处理
  2. asp.net core 3.0 更新简记
  3. 进程间通信之2----共享内存
  4. 管理工作中的50点感悟
  5. 利用curl去hack他人博客
  6. mac搜索文件什么都没有,是为什么
  7. Scratch 3.X中的部分错误汇总
  8. 电脑如何开启卓越性能模式
  9. 推荐10个国外图片素材网站
  10. lumion室内渲染二6.3
  11. 博世中国的战略与战术,如何应对复杂多变的中国市场需求
  12. Unity3D学习——使用PUN写一个聊天功能
  13. 软件如何进行压力测试,软件如何进行压力测试?
  14. 微信二级不死域名是什么意思?被封后还能访问吗?
  15. 计算机键盘掉色,为什么计算机键盘指示灯熄灭?
  16. SpringBoot+AOP(@Around)
  17. python pyinstaller 打包exe文件,(附带图片 + 自己、别人电脑上均可以运行)
  18. CA认证简单介绍和工作流程
  19. 以小饭桌网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)
  20. 关于QQ通讯录的应用及vcf文件导入手机的乱码问题

热门文章

  1. Dedecms QQ一键登录插件
  2. 数据挖掘十大经典算法笔记
  3. Qgis 如何根据范围来裁剪地图,高程图等
  4. C++ Struct(结构体)详解
  5. bezier.CSS_SVG_canvas画_贝兹曲线
  6. Java实习(一维)线性回归方程
  7. win10尘埃4点击开始游戏自动关闭没反应|dirt4.exe进程消失的解决方法
  8. 让你提前认识软件开发(8):memset()与memcpy()函数
  9. ECCV 2022全奖项公布,两位华人学者摘得最佳论文奖,本科来自清华、浙大
  10. 2021年度训练联盟热身训练赛第四场 I.Slot Machines【KMP】