在 Android 自定义View 里面,介绍了自定义的View的基本概念。

在 Android 控件架构及View、ViewGroup的测量 里面介绍了 Android 的坐标系 View、ViewGroup的测量方面的内容。

本文我们重点整理一下自定义View绘制的相关技术。

重点:

1. 掌握重写绘制方法,主要涉及到的方法是 onDraw()。 -- 本文说明

2. 掌握Canvas 的使用,主要是掌握Canvas的绘制类方法:drawXXX() 涉及的关键绘制对象 Paint。-- 本文说明

难点:

1. 了解和学会Canvas的辅助类的使用,主要是范围裁切和几何变换。-- 参考后面的推荐博客

2. 了解和学会使用不同的绘制方法来控制遮盖关系。 -- 参考后面的推荐博客

自定义绘制步骤:

1. 提前创建好 Paint 对象,重写 onDraw(),把绘制代码写在 onDraw() 里面,就是自定义绘制最基本的实现。

Paint paint = new Paint();

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); // 不能缺失
// 绘制一个圆
canvas.drawCircle(300, 300, 200, paint);
}

2. 创建Paint,其中几个最常用的方法:

Paint.setStyle(Style style) // 设置绘制模式

Paint.setColor(int color) // 设置颜色

Paint.setStrokeWidth(float width) // 设置线条宽度

Paint.setTextSize(float textSize) // 设置文字大小

Paint.setAntiAlias(boolean aa) // 设置抗锯齿开关

3. 执行 Canvas 下的相关 draw- 打头的方法,例如 drawCircle()、drawBitmap()

drawColor(@ColorInt int color)  // 颜色填充 -- 在整个绘制区域统一涂上指定的颜色。

drawCircle(float centerX, float centerY, float radius, Paint paint) // 画圆 -- 可以通过修改Paint的参数来画不同类型的圆形。

drawRect(float left, float top, float right, float bottom, Paint paint) // 画矩形

drawPoint(float x, float y, Paint paint)  // 画点 -- setStrokeCap() 可以设置点的形状(矩形/圆形)

drawPoints(float[] pts, int offset, int count, Paint paint)  // drawPoints(float[] pts, Paint paint) 画点(多个)

drawOval(float left, float top, float right, float bottom, Paint paint)  // 画椭圆

drawLine(float startX, float startY, float stopX, float stopY, Paint paint) // 画线

drawLines(float[] pts, int offset, int count, Paint paint) / drawLines(float[] pts, Paint paint)  // 画线(多个)

drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)  // 画圆角矩形

drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)  //绘制弧形或扇形

drawPath(Path path, Paint paint)  // 画自定义图形

因为时间关系,自定义View绘制就说到这里,基本上所有的图形绘制都是基于这三步的。

如果需要比较高级的特效的,参考朱凯大神的博客,本人就不多在这里赘述了:

视频教程地址: http://www.bilibili.com/video/av12937987/?zw

文章教程地址如下:

http://hencoder.com/ui-1-1/  绘制基础

http://hencoder.com/ui-1-2/  Paint 详解

http://hencoder.com/ui-1-3/  文字的绘制

http://hencoder.com/ui-1-4/  Canvas 对绘制的辅助

最新文章

  1. Java基础之反射和动态代理
  2. Android开发之JavaMail发送邮件(用户反馈)
  3. 浅谈Oracle中物理结构(数据文件等。。。)与逻辑结构(表空间等。。。。。)
  4. [No00002F]3步,教你如何分解需求
  5. 03_Java面向对象特征: 封装性
  6. Qt开发环境中使用报表控件FastReport遇到的一些问题(一)
  7. macro names must be identifiers
  8. sublime3 常用功能总结
  9. [poj 2978]Colored Stones[状态压缩DP]
  10. 关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会
  11. GWT开端
  12. 关于我上传的activiti自定义流程demo的说明
  13. wpf编写一个简单的PDF转换的程序
  14. 部署ceph
  15. mysql-5.7 通过apt或者yum安装方式
  16. 项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)
  17. 团队服务器搭建(搭建php环境和安装在线mysql管理工具phpmyadmin)
  18. Vue——服务器上部署vue.js
  19. 2.DI依赖注入
  20. xml/map转换器,递归设计思路【纯原】

热门文章

  1. CentOS-07安装Redis学习笔记
  2. mysql学习记录
  3. 基于stm32f427实现SVPWM控制永磁同步开环转动
  4. VUEX报 “was assigned to but it has no setter”
  5. EasyPR源码剖析(9):字符识别
  6. Python之路(第三十五篇) 并发编程:操作系统的发展史、操作系统的作用
  7. python3 第二十七章 - 内置函数之str相关
  8. flume1.4.0源码结构剖析
  9. LOJ-10096(强连通+bfs)
  10. swagger 参数