根据 Hencoder 提供的知识点,进行学习和总结。

三个要点:

  1. 布局
  2. 绘制
  3. 触摸反馈

绘制

  • 自定义绘制:由自己实现绘制过程
  • 常用绘制方法 onDraw(Canvas canvas)
  • 绘制关键:
    1. canvas: 绘制工具

      • 绘制类方法

        • drawCircle(): 画圆
        • drawRect():画方形
        • drawPath():画路线
        • drawText():画文本
        • drawBitmap():画 bitmap
      • 绘制辅助工具
        • 绘制范围的裁切
        • 绘制内容的几何变换
    2. paint: 本意颜料,Android中指加强颜料,可设置各种风格,比如是空心还是实心或者是粗细等
    3. 绘制顺序:Android 按照顺序绘制的。除了 onDraw() 绘制主体部分,还有绘制前景( Forground)和背景( BackGround)

示例:

Paint 常见设置:

  • mPaint.setColor(Color.RED):设置颜色
  • mPaint.setStyle(Style.STROKE):设置绘制模式
  • mPaint.setStrokeWidth(20):设置线条开关
  • mPaint.setAntiAlias(true):设置抗锯齿

Cancan 绘制类方法

绘制颜色

* canvas.drawColor(Color.RED);
* canvas.drawColor(Color.parseColor("#00ff00"));
* canvas.drawColor(Color.parseColor("#8800ff00"));
* canvas.drawRGB(255, 0, 0);
* canvas.drawARGB(100, 255, 0, 0);

绘制圆

1. 实心圆: 

        mPaint = new Paint();
canvas.drawCircle(100, 100, 50, mPaint); 2. 空心圆 mPaint.setStyle(Style.STROKE);
canvas.drawCircle(200, 200, 50, mPaint); 3. 蓝色实心圆 mPaint.setStyle(Style.FILL);
mPaint.setColor(Color.BLUE);
canvas.drawCircle(200, 400, 50, mPaint); 4. 线宽为20的空心圆 mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(20);
canvas.drawCircle(400, 200, 50, mPaint);

绘制椭圆

    canvas.drawOval(300, 100, 700, 300, mPaint);

绘制矩形

    canvas.drawRect(250, 500, 700, 800, mPaint);
//
Rect tem1 = new Rect(250, 500, 700, 800);
canvas.drawRect(tem1, mPaint);
//
RectF tem2 = new RectF(250, 500, 700, 800);
canvas.drawRect(tem2, mPaint);

绘制圆角矩形

    RectF t = new RectF(150, 200, 500, 350);
canvas.drawRoundRect(t, 50, 50, mPaint);
//
canvas.drawRoundRect(150, 200, 500, 350, 50, 50, mPaint);

绘制弧形或者扇形

  • drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, Paint paint)

    * left,top,right,bottom:弧形所在的椭圆

    * startAngle:弧形的起始角度(x 轴的正向,即正右的方向,0度的位置。顺时针为正角度,逆时针为负角度)

    * sweepAngle:弧形划过的角度

    * useCenter:表示十分连接圆心,连接圆心是扇形不连接圆心是弧形

  • 绘制弧形

      canvas.drawArc(200, 600, 800, 1000, 0, 47, false, mPaint);
  • 绘制扇形

      canvas.drawArc(200, 600, 800, 1000, 0, 135, true, mPaint);
  • 示例:

      mPaint.setAntiAlias(true);
    mPaint.setStyle(Style.FILL);
    canvas.drawArc(200, 100, 800, 500, -110, 100, true, mPaint); // 绘制扇形
    canvas.drawArc(200, 100, 800, 500, 20, 140, false, mPaint); // 绘制弧形
    mPaint.setStyle(Paint.Style.STROKE); // 画线模式
    canvas.drawArc(200, 100, 800, 500, 180, 60, false, mPaint); // 绘制不封口的弧形

画自定义图形

  • drawPath(Path path, Paint paint): 通过描述路径的方式来绘制图形

    • path: 描述路径的对象
    • paint:
  • Path

    • 直接描述路径

      1. addXxx() -- 添加子图形
      • addCircle(float x, float y, float radius, Direction dir),该方法与 Canvas 的 drawCircle() 一样的,绘制圆形

        • 描述:添加圆
        • 参数 x 和参数 y :确定圆心
        • 参数 radius: 确定圆的半径
        • dir: 画圆路径的方向,枚举类型,CW(clockwise)顺时针/CCW(counter-clockwise)逆时针
      • addArc():与 Canvas 的 drawArc() 一样,绘制弧形或者扇形
      • addOval():与 Canvas 的 drawOval() 一样,绘制椭圆
      • addRect():与 Canvas 的 drawRect() 一样,绘制矩形
      • addRoundRect():与 Canvas 的 drawRoundRect() 一样的,绘制圆角矩形
      1. xxxTo()--画线(直线或者曲线)
      • lineTo():画直线,从当前位置向目标位置画一条直线,参数为目标位置 x,y
      • rLineTo(): 与 lineTo() 方法一样,参数是相对当前位置的相对坐标
      • moveTo():移动到目标位置
      • rMoveTo()
      • cubicTo():画三次贝塞尔曲线
      • rCubicTo()
      • quadTo():画二次贝塞尔曲线
      • rQuadTo()
      • arcTo: 画弧形
      1. close():封闭当前子图形,与 lineTo(起始坐标)一样
    • 辅助的设置或计算
      • setFillType():设置填充方式

        • EVEN_ODD:奇偶原则,交叉填充模式,对于平面的任意一点,向任意方向射出一条射线,这条射线和图形相交的次数(相交才算,相切不算)如果是奇数,则这个点被认为在图形内部,是要被涂色的区域;如果是偶数,则这个点被认为在图形外部,是不被涂色的区域。
        • WINDING (默认值):非零环绕数原则,全填充模式
        • INVERSE_EVEN_ODD
        • INVERSE_WINDING

绘制 Bitmap

  • drawBitmap()

绘制文字

  • drawText()

Android 自定义 View 知识点的更多相关文章

  1. Android 自定义view(二) —— attr 使用

    前言: attr 在前一篇文章<Android 自定义view -- attr理解>已经简单的进行了介绍和创建,那么这篇文章就来一步步说说attr的简单使用吧 自定义view简单实现步骤 ...

  2. Android自定义View(CustomCalendar-定制日历控件)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/54020386 本文出自:[openXu的博客] 目录: 1分析 2自定义属性 3onMeas ...

  3. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...

  4. Android自定义View(三、深入解析控件测量onMeasure)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51490283 本文出自:[openXu的博客] 目录: onMeasure什么时候会被调用 ...

  5. Android自定义View(二、深入解析自定义属性)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51468648 本文出自:[openXu的博客] 目录: 为什么要自定义属性 怎样自定义属性 ...

  6. android 自定义view 前的基础知识

    本篇文章是自己自学自定义view前的准备,具体参考资料来自 Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了 ...

  7. 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

    前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...

  8. Android自定义View 画弧形,文字,并增加动画效果

    一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类   B ...

  9. (转)[原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

随机推荐

  1. npm 主要命令

    本文主要参考自:http://www.runoob.com/nodejs/nodejs-npm.html 1.使用 npm 命令安装模块 $ npm install express var expre ...

  2. Page Visibility实现焦点丢失提醒

    0.前言 HTML5 Page Visibility API是一个很实用的特性.当页面对用户不可见时,暂停播放页面中的视频.动画.声音.以及其它耗费内存的操作,等用户回来时.再继续这些操作. 当然,最 ...

  3. java中经常使用的快捷键

    Eclipse(MyEclipse) 经常使用快捷键Eclipse 的编辑功能很强大.掌握了 Eclipse 快捷键功能,能够大大提高开发效率. Eclipse中有例如以下一些和编辑相关的快捷键.1. ...

  4. 高仿美团主界面&lt;一&gt;

    声明:本demo还未完好,正在持续更新中... 先上图吧: 这个小demo资源图片全是用青花瓷抠出来的,如今仅仅是完毕了 一部分. 会持续更行中. . .有兴趣的朋友能够关注我,我们一起coding, ...

  5. 4、redis之使用commons-pool

    增加池的配置文件redis-pool.properties: #最大能够保持idel状态的对象数 redis.pool.maxIdle=200 #当池内没有返回对象时,最大等待时间 redis.poo ...

  6. ios中打包

    第一步:这里需要注意,要选择真机,否则Archive 会是灰色的. 点击后,系统会自动编译一次,并跳转到如图界面: 第二步: 在你刚刚生成的程序上点击右键,并且点击Show in Finder.   ...

  7. Emacs显示光标在哪个函数

    Emacs24中打开which-function-mode即可. 在.emacs中添加一行: (which-function-mode 1) 调整which-function在mode-line中的显 ...

  8. hibernate的批量删除

    转自:hibernate的批量删除一般而言,hibernate的批量删除的写法有两种,一种是hibernate内置的批量删除,不过他的批量删除是将每条记录逐一生成删除语句,其效率极低,当然我们可以使用 ...

  9. Android开发环境内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  10. linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解

    一.校验与核实 目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和. 举例: amosli@amosli-pc:~/learn$ md5sum text.t ...