Canvas、Paint绘图

来源:互联网 发布:注册淘宝跳过手机验证 编辑:程序博客网 时间:2024/06/10 12:57

最近看了一些绘图相关的知识,记录一下,方便查阅。绘图常用于自定义View的情况,可以根据需求绘制出相应的图案。

一、Canvas

Canvas持有(holds)所有的绘制操作,简单点说,canvas就是画布,所有的绘制都要在画布上进行。绘制操作需要四个基本的组件:1.一个执行所有绘制操作的画布canvas;2.一个持有所有像素的位图bitmap(可以理解为bitmap就是铺在canvas上的像素);3.一个绘制源数据(例如一个Rect,Path,Text或者是Bitmap);4.一个画笔Paint,描述绘制时的颜色,粗细等。

Canvas的常用方法

  • drawRect(Rect rect, Paint paint)/drawRect(int left, int top, int right, int bottom, Paint paint)
    绘制出一个指定的矩形,绘制的style由Paint指定。
  • drawCircle(float cx, float cy, float radius, Paint paint)
    绘制出一个指定的圆形,(cx, cy)为圆心坐标,radius是半径。
  • drawText (String text, float x, float y, Paint paint)
    绘制文字。x,y为绘制原点。注意此处的绘制原点是文字的左下角,与android布局常用的左上角不同。
  • drawBimap
    绘制bitmap若干种参数列表。常用的drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
    在指定位置上绘制一个bitmap。
  • drawPath
    绘制一条路径。关于Path和PathMeasure准备另开一篇单独来学,在此就先略过。
  • clipRect
    官方说明:Modify the current clip with the specified rectangle, which is expressed in local coordinates.
    个人理解:通过clipRect设置一个矩形区域,绘制时只绘制此区域中的内容,其余部分不进行绘制。例如两个bitmap重叠时,可以通过这种方式,只绘制用户看得到的区域,提升绘制效率。

二、Paint

Paint包含了绘制几何图形,文字或者位图的样式和颜色等信息。直译为涂料,画笔。

构造方法

  • public Paint()
    默认构造函数
  • public Paint(int flag)
    拥有特殊标记的一个paint
    ANTI_ALIAS_FLAG ——————抗锯齿
    FAKE_BOLD_TEXT_FLAG————加粗效果绘制文本
    DITHER_FLAG————————–绘制位图时进行颜色抗抖动,简单来讲就是是颜色过度更加自然(自己没试过,网上查阅)

  • public Paint(Paint paint)
    根据一个已知画笔属性,创建出一个新的画笔。类似画笔的拷贝

常用方法

  • setStrokeCap(Paint.Cap cap)
    设置笔头的形状
    Paint.Cap.BUTT : 标准头
    这里写图片描述
    Paint.Cap.ROUND:多了一个圆头
    这里写图片描述
    Paint.Cap.SQUARE : 多了一个方头
    这里写图片描述

  • setStyle(Paint.Style style)
    设置样式
    Paint.Style.FILL:内部填充
    Paint.Style.STROKE :描边
    Paint.Style.FILL_AND_STROKE :内部填充并且描边
    还是不清楚区别,看下面的图吧:
    这里写图片描述

  • setTextAlign(Paint.Align align)
    设置文字的对齐方式
    Paint.Align.CENTER:中间对齐
    Paint.Align.LEFT:左对齐
    Paint.Align.RIGHT:右对齐

  • setStrokeWidth(float width)
    当style为STROKE或者FILL_AND_STROKE时,用来设置画笔的粗细

  • setTextSize(float size) 设置文字大小

  • setTextScaleX(float scale) 设置文字X方向缩放比例,实现文字拉伸效果
  • setTextSkewX(float skew) 设置文字倾斜效果。官方推荐±0.25,可以得到较好的倾斜效果
  • setTypeface(Typeface typeface) 设置字体效果
  • getTextBounds(String text, int start, int end, Rect bound)
    根据文本边界获取一个矩形bound, 由此bound可以得到文本的宽高等信息
  • setXfermode(Xfermode xfermode)
    设置图像重叠时的显示效果
    关于Xfermode的具体效果及用法,请阅读此篇文章。
  • breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth,float[] measuredWidth)
    计算文本text指定宽度(maxWidth)内所包含的字符个数
  • setPathEffect(PathEffect pathEffect)
    设置路径效果,PathEffect有6个子类实现,分别是:
    ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect 这6种效果后续研究
0 0
原创粉丝点击