一、坐标

①、通过View获取坐标,通过调用getLeft()、getRight()...方法获取坐标。

1、获取到的是相对于View父控件的位置

2、指的是左上角和右下角的x,y值

3、View还提供了setTranslate()和getX(),getY()方法

translate()指的是偏移量,偏移量指的是在当前基础上,移动的距离

getX()指的是getLeft()+trasnalte()

②、通过event事件点击获取到的坐标

getX():以自身View左上角点为坐标远点。

getRawX():以屏幕左上角点作为坐标原点。

getScroller():获取View内容偏移的距离。

二、颜色:

①、安卓支持的颜色模式:

ARGB8888,ARGB4444,RGB565,Alpha8

颜色模式 备注
ARGB8888 四通道高精度(32位)
ARGB4444 四通道低精度(16位)
RGB565 屏幕默认模式(16位)
Alpha8 仅有透明通道(8位)

A:表示透明度。   R:表示red     G:green   B:blue

RGB就是颜色中的三原色。

②、如何自定义颜色

1、颜色是用16进制表示的   0x

2、所以:00(无色)->ff(颜色充满) 表示 0~255

3、红色就表示为#ff0000 或者0xff00000 也可以写成  #ffff0000 。。表示透明度的进制是可以忽略的。

三、利用Canvas绘制基本图形

1、绘制点(一个点,多个点一起复制)

canvas.drawPoint(x,y,mPaint);

canvas.drawPoint(new float[]{x1,y1,x2,y2},mPaint);

2、绘制线(一条线,多条线)

canvas.drawLine(startX,startY,endX,endY,mPaint);

canvas.drawLine(new float[]{startX1,startY1,endX1,endY1,startX2,startY,2endX2,endY2.,..},mPaint)

3、绘制矩形

canvas.drawRec(left,top,right,bottom,mPaint);

canvas.drawRect(Rect rect,mPaint);

canvas.drawRect(Rectf rectf,mPaint);

什么是Rect和RectF。这两个类的区别是什么

Rect and RectF:表示创建一个虚拟的矩形。  为什么叫虚拟的,因为创建出来并不会显示在canvas上。

两者的区别在:Rect接收int类型的参数,RectF接收float类型的参数。更精确一点。

4、绘制圆角矩形

canvas.drawRoundRect(Rect rect,float sx,float sy,mPaint);

因为圆角弧度并不是正规的圆,其实是一个椭圆形。

所以sx表示椭圆的x长度,sy表示椭圆的y的长度

5、绘制椭圆

canvas.drawOval(Rect rect,mPaint);

6、绘制圆

canvas.drawCirclr(float cx,float cy,float radium,mPaint);

7、绘制圆弧:

canvas.drawArc(Rect rect,float startAngle,float sweepAngle,boolean useCenter,mPaint)

图一:useCenter  = false;

图二:useCenter = true;

四、Paint的简单使用

setStyle():  是画边框还是填充满,或者两个都要

setColor():设置笔触的颜色

setAlpha():设置透明度。

setAntiAlias():是否抗锯齿

五、Canvas对自己的操作(第一组:translate、rotate、第二组:save(),restore(),)

translate(float x,float y):改变坐标原点(也可以叫移动坐标原点)。本来的左边原点是在左上角的,通过translate改变坐标原点。

rotate(float angle,float px,float py):旋转画布。确定旋转点和旋转角度 android旋转是从第一象限 到第四象限旋转。

(默认是原点旋转)

具有可叠加性。

save()就是将当前完成的canvas加入到栈中

restore():将栈中的save()的canvas取出并绘制在当前的canvas。

可以理解成:save()表示保存当前图层,之后的操作是在新的图层上进行的,但是之前save()的图层上的内容还是存在的。restore()之后表示合并图层。

个人理解:感觉save()更倾向于保存一种配置。 比如说save()之前坐标原点是在左上角处,在save()后我调用了translate()方法将 坐标原点设定在(100,200)处,再进行绘图。最后调用restore()方法,坐标原点又变成了save()之前的样式(即左上角)

6、canvas对自己的操作(二)

scale(flaot sx,float sy):设置x,y的缩放比例。默认缩放中心是原点

scale(float sx, float sy,float px,float py):设定缩放中心。

当sx,sy为负数的时候,表示沿x,y抽进行翻转缩放。

并具有可叠加性:我现在scale(0,.9f,0.9f) 之后我再调用scale(0.5f,0.5f) 根据可叠加性,最后的结果就是 0.9*0.5 = 0.45

7、canvas绘制图片(drawPicture())

1、Picture类的作用:录制绘制的过程。就是录制下创建picture的过程

①、开始录制:beginRecording()  结束录制:endRecording()

②、将录制的结果,绘制到canvas中:canvas.drawPicture()

可用方法:

获取录制区域的宽高:getWidth()。、getHeight()

设定显示的区域:picture.setBound(Rect rect);   canvas.drawPicture(picture,Rect rect);//表示picture可用区域

这两者是不同的,显示区域表示:我有一张图片,我只显示1/4。可用区域表示,我有这么大的区域,你要全部放进来。

2、drawBitmap()

①、获取Bitmap

②、Bitmap的可用区域与显示区域。

drawBitmap(bitmap,Rect src,RectF dst,mPaint)

src:表示显示区域   同样,我有一张图,我只显示1/4。 这样的作用是,有时候我们将一堆素材图放在一张图片中。我们只要确定图片显示的区域,就可以很好的利用素材了。

dst:表示可用区域。

8、绘制文字

分为三种类型

第一类只能指定文本基线位置位置(基线x默认在字符串左侧,基线y默认在字符串下方)。

创建:设定文字,截取文字、设定放在canvas的什么地方。
第二类可以分别指定每个文字的位置。

创建:设定文字、设定每个文字的位置new float[],设定显示的宽度

第三类是指定一个路径,根据路径绘制文字。

9、Path的基本操作

主要作用:可以绘制这些比较复杂的图形。另外,根据路径绘制文本和剪裁画布都会用到Path。

第1组: moveTo、 setLastPoint、 lineTo 和 close

第2组: addXxx与arcTo(添加图形与Canvas的图形差不多,弧形的制作)

自定义VIew基础的更多相关文章

  1. 自定义View基础 (1)

    前言 自定义View原理是Android开发者必须了解的基础: 在了解自定义View之前,你需要有一定的知识储备: 本文将全面解析关于自定义View中的所有知识基础. 目录 目录 1. View的分类 ...

  2. Android自定义View基础

    自定义控件, 视频教程 http://www.jikexueyuan.com/course/1748.html 1. 编写自定义view 2. 加入逻辑线程 3. 提取和封装自定义view 4. 利用 ...

  3. 51、自定义View基础和原理

    一.编写自己的自定义View最简单的自定义View,继承View通过覆盖View的onDraw方法来实现自主显示利用Canvas和paint来绘制显示元素(文字,几何图形等) <com.myvi ...

  4. 安卓自定义View基础 --坐标系,角度弧度,颜色

    转自:https://www.gcssloop.com/customview/CustomViewIndex/ 1.坐标系 2.角度弧度 3.颜色 一.屏幕坐标系和数学坐标系的区别 由于移动设备一般定 ...

  5. 自定义View Draw过程(4)

    目录 目录 1. 知识基础 具体请看我写的另外一篇文章:自定义View基础 - 最易懂的自定义View原理系列 2. draw过程作用 绘制View视图 3. draw过程详解 同measure.la ...

  6. 自定义View Layout过程 (3)

    目录 目录 1. 知识基础 具体请看我写的另外一篇文章:(1)自定义View基础 - 最易懂的自定义View原理系列 2. 作用 计算View视图的位置. 即计算View的四个顶点位置:Left.To ...

  7. 自定义View Measure过程(2)

    目录 目录 1. 作用 测量View的宽/高 在某些情况下,需要多次测量(measure)才能确定View最终的宽/高: 在这种情况下measure过程后得到的宽/高可能是不准确的: 建议在layou ...

  8. 安卓自定义View教程目录

    基础篇 安卓自定义View基础 - 坐标系 安卓自定义View基础 - 角度弧度 安卓自定义View基础 - 颜色 进阶篇 安卓自定义View进阶 - 分类和流程 安卓自定义View进阶 - Canv ...

  9. 【朝花夕拾】Android自定义View篇之(九)多点触控(下)实践出真知

    前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理 ...

随机推荐

  1. Android再学习-便签开发小结-20141119

    这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...

  2. CSS太阳月亮地球三角恋旋转效果

    纯粹玩一下,好像没有什么实际的卵用,but,纯玩买不了上当,纯玩买不了受骗........ 地月旋转的一个css效果,无聊玩玩,可以复制到记事本试试 <!DOCTYPE html>< ...

  3. pcduino通过sd卡刷系统

    1.登录到pcduino的官网,下载相应的文件. 下载第一个kernel和后面那个ubuntu. 2.将SD卡插入到电脑上,运行下面这个软件: 那个盘符就是你的SD卡的盘符,选择卡量产,镜像文件选上面 ...

  4. STL string常用操作指令

    s.insert(pos,args); 在pos之前插入args指定的字符.pos可以是一个下标或一个迭代器.接受下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器. s. ...

  5. commons-pool2-中的一些配置

      /**                     * 连接失效检测相关                     */                    // 空闲时进行连接测试,会启动异步evi ...

  6. android资料

    http://bbs.51cto.com/thread-903936-1.html http://zhidao.baidu.com/question/195697097.html?sort=4& ...

  7. Struct2(三) Struct2 标签

    在上一篇 Struct2(二)中,我们新建了工程Struct2test用来验证hello World 程序,在index.jsp中,我们添加了一个Struct2 uri 标签用来创建一个指向hello ...

  8. Android apk获取系统权限

    Android在apk内部,即通过java代码来进行修改系统文件或者修改系统设置等等,这样需要获取系统权限. 通过直接配置apk运行在System进程内 1. 在应用程序的AndroidManifes ...

  9. c语言结构体1之定义

    这是在复习阶段随便小结的一些东西 别喷哦 结构体定义的三种方式 注意事项: 1结构体括号后面有分号 2#define得放在程序上面 3成员名可以和结构体名相同 4结构体类型不能直接访问成员,也不能赋值 ...

  10. ubuntu14.04 + cocos2d-x-2.2.6 + eclipse发布android + Qt Creator4

    先把需要的东西准备好,打开控制台,执行以下语句: sudo apt--jdk lib32z1 lib32ncurses5 lib32bz2- 接下来,准备好cocos2d-x-2.2.6和 andro ...