Android自定义View(一)(Paint和Canvas的基本使用)_anonymous view_Anonymous-OS的博客-程序员宅基地

技术标签: canvas  绘图  Android  

Android开发中自定义视图是走向高手的必经之路,如何绘制漂亮的图形呢,让我们一起走进Android绘图的世界

相关文章:

《Android自定义View(二)(加载进度动画)》


想要自定义视图,第一步就是Paint和Canvas的基本使用,下面让我们来一起学习绘图中画笔和画布的基本使用。

一、Paint属性

   setAntiAlias: 设置画笔的锯齿效果。
   setColor: 设置画笔颜色
   setARGB:  设置画笔的a,r,p,g值。
   setAlpha:  设置Alpha值
   setTextSize: 设置字体尺寸。

   setShadowLayer:设置阴影
   setStyle:  设置画笔风格,空心或者实心。
   setStrokeWidth: 设置空心的边框宽度。
   getColor:  得到画笔的颜色
   getAlpha:  得到画笔的Alpha值。

二、Canvas属性

  1、填充

  drawARGB(int a, int r, int g, int b)
  drawColor(int color)
  drawRGB(int r, int g, int b)
  drawColor(int color, PorterDuff.Mode mode)

 2、几何图形

  canvas.drawArc (扇形)

  canvas.drawCircle(圆)

  canvas.drawOval(椭圆)

  canvas.drawLine(线)

  canvas.drawPoint(点)

  canvas.drawRect(矩形)

  canvas.drawRoundRect(圆角矩形)

  canvas.drawVertices(顶点)

  cnavas.drawPath(路径)

 3、图片

  canvas.drawBitmap (位图)

  canvas.drawPicture (图片)

三、介绍完基本属性

 //画空心圆

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
paint.setAntiAlias(true);
canvas.drawCircle(150,150,100,paint);

//画实心圆(修改画笔的Style即可)

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
canvas.drawCircle(150,150,100,paint);



//画矩形

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(6);
paint.setAntiAlias(true);
canvas.drawRect(50, 150, 250, 350, paint);

//圆角矩形

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(6);
paint.setAntiAlias(true);
RectF re2 = new RectF(40, 300, 150, 460);
canvas.drawRoundRect(re2, 15, 15, paint);
RectF re2 = new RectF(40, 300, 150, 460);
这四个   参数   分别代表的意思是: left   top   right   bottom   上下左右呗。啊,不是           下。   下面给大家解释   
left    矩形左边的 X 坐标  
top:     矩形顶部的 Y 坐标  
right :   矩形右边的 X 坐标   
bottom   矩形底部的 Y 坐标
canvas.drawRoundRect(re2, 15, 15, paint);

rect:RectF对象。

rx:x方向上的圆角半径。

ry:y方向上的圆角半径。

paint:绘制时所使用的画笔。



//根据Path进行绘制,绘制三角形

canvas.drawPath(path5, paint);
Path path = new Path();
path.moveTo(60, 60);
path.lineTo(160, 160);
path.lineTo(320, 80);
path.close();
canvas.drawPath(path, paint);


//绘制椭圆

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(6);
paint.setAntiAlias(true);
RectF re31 = new RectF(170, 240, 430, 320);
canvas.drawOval(re31, paint);

//渐变器的使用

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
Shader mShader = new LinearGradient(0, 0, 40, 60, new int[]{
                Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}, null,
                Shader.TileMode.REPEAT);
paint.setShader(mShader);
RectF re31 = new RectF(170, 240, 430, 320);
canvas.drawOval(re31, paint);
创建LinearGradient并设置渐变颜色数组   
第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置  
第三个,第四个参数表示渐变终点  
第五个参数表示渐变颜色  
第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }  
如果这是空的,颜色均匀分布,沿梯度线。  
第七个表示平铺方式  




到这里你应该已经会绘制很多图形了,其实都是大同小异,熟悉了这些绘制,自定义视图据离你越来越近了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014752325/article/details/51278432

智能推荐

第三代测序技术在微生物研究中的应用_第三代测序技术的应用-程序员宅基地

第三代测序技术在微生物研究中的应用曹晨霞,韩琬,张和平 摘要: 1977年Sanger 发明的双末端终止法开启了测序之旅,而测序技术在30多年内不断革新。 每种新技术的出现都有超过前代产品的独特之处,但也会不可避免的存在自身局限性,关键在于掌握每种技术的优缺点并加以合理应用。第三代测序技术是一种集高通量、快速度、长读长及低成本等多种优点于一身的新型测序技术,它的出现为基因组学、..._第三代测序技术的应用

计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码_定点小数的原码反码补码-程序员宅基地

移码只能用于表示整数,而不能用于表示定点小数无论是用哪种码,只要我们表示的是定点整数,我们都默认小数点是隐含在最低位的后面对于定点小数来说,无论我们用哪种码,我们都默认小数点是隐含在符号位的后面各种码对真值零的表现形式原码和反码有+0和-0这样的两种状态而补码和移码表示真值0只能有一种表示形态整数的表示范围−2n−1≤x≤2n−1−2n−1≤x≤2n−1−2n≤x≤2n−1−2n≤x≤2n−1小数。_定点小数的原码反码补码

空间复杂度计算超全整理!!(一起手撕复杂度计算-程序员宅基地

空间复杂度超全解析~欢迎光临,这里是媛仔的数据结构进阶之路!!_空间复杂度

1053:最大数输出--信息学一本通(c++)_c++1053-程序员宅基地

NOIP信息学奥赛资料下载时间限制: 1000 ms 内存限制: 65536 KB提交数: 16094 通过数: 11323【题目描述】输入三个整数,数与数之间以一个空格分开。 输出一个整数,即最大的整数。【输入】输入为一行,包含三个整数,数与数之间以一个空格分开。【输出】输出一行,包含一个整数,即最大的整数。【输入样例】10 20 56【输出样例】..._c++1053

邮件push服务器,Coremail Push-程序员宅基地

什么是Coremail Push?Coremail push是采用微软官方专利授权的EAS协议推送技术为核心研发而成,通过无缝集成企业邮件服务器,可实时、安全把邮件推送到客户的移动终端设备。同时,客户还可在移动设备上进行日常邮件收发处理,通讯录同步、日程同步、会议邀请等操作应用,便捷处理邮箱事务,灵活提升户外办公效率。用户在移动端的所有操作亦实时同步至服务器。Coremail Push支持哪些手机..._coremail push

跨专业计算机 调剂,考研调剂专业课必须一样吗 可以跨专业吗-程序员宅基地

教育部没有规定原则上不许跨学科调剂。不能跨学科调剂主要还是学校自己的政策,这和是否招收同等学力考生类似。一般跨学科调剂只要满足初试成绩比两个学科的该区最低控制线都高,且专业课类似就可以。能跨学科调剂的专业跨一级学科/领域调剂(分数需达到该一级学科所在门类/类别所报招生单位的分区资格线)的学科领域包括:体育学[0403]、体育硕士[0452]、中医学[1005]、中西医综合[1006]、临床医学照顾..._计算机能调剂法学吗

随便推点

AndroidStudio导出Jar包-程序员宅基地

(转载)http://www.jianshu.com/p/5db27dcd988a程序亦非猿 2015.09.17 11:53*工具版本:Gradle 2.4AndroidStuido 1.4Beta3在需要打jar包的Module下的build.gradle下配置如下:PS:`rename`可以配置jar名字,`into`可以配置jar输出路径ta

经典排序算法(11)——计数排序算法详解_计数排序为什么要反向读取-程序员宅基地

计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。一、算法基本思想(1)基本思想计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最_计数排序为什么要反向读取

linux 的三驾马车grep ,sed,awk-程序员宅基地

grepls readme*ls example*只要出现gene字眼都查找出less example.gtf| grep 'gene'精确查找,一个单词一个单词的搜索less example.gtf| grep -w 'gene'less example.gtf| grep -w -v -c 'gene'wc -l example.gtfless example.gtf| grep -w -e 'gene' -e 'U...

windows 正在查找bash.exe。如果想亲自查找文件,请点击“浏览”。_查看git bash exe-程序员宅基地

问题描述今天安装DockerToolbox成功后,双击运行Docker Quickstart Terminal提示:windows 正在查找bash.exe。如果想亲自查找文件,请点击“浏览”。原因安装DockerToolbox时会安装Git,所有上图所示的bash.exe是指Git的bash.exe。找到Docker Quickstart Terminal右击属性查看目标栏ba..._查看git bash exe

Python批量重命名文件_if in file: python-程序员宅基地

按照txt中的顺序将文件夹中的文件批量重命名:import osdef re_name(path): for file in os.listdir(path): file_path = os.path.join(path, file) #print(file) if ".dic" in file.lower(): # 判断文件是否为dic文件 for i in range(len(LstFilesDIC)): _if in file: python

skyeye1.2.8运行u-boot出现大量"bus read error"解析_bus read 错误-程序员宅基地

平台环境:skyeye1.2.8+u-boot1.2.0+smdk2410现象描述:在运行的时候会出现大量的“bus read error”错误,或者u-boot跑飞出现乱码信息。 1.2.8相对1.2.6最大的改变就是将存储管理这一块做成相对独立的模块,我想这样做的目的应该是能够把更多的精力放在新平台新架构的研发。出现问题我初步想法可能就是在这个改变上。通过与1.2.6上跑u-_bus read 错误