自定义view梳理——Canvas Paint Bitmap

** Canvas **
画布:需要:

  1. 一个Bitmap去持有像素
  2. Canvas托管绘制调用,绘制在Bitmap上,
  3. 一个绘制原型,比如矩形 path,test,bitmap
  4. 一个画笔,绘制的颜色和样式

** Bitmap**
is a representation of image in byte form.Bitmapint[] buffer, 也就是说这里有个缓存, 用来保存每个像素的信息

public final class Bitmap implements Parcelable {

    /**
     * Backing buffer for the Bitmap.
     */
    private byte[] mBuffer;
}

canvas类中有个Bitmap对象,

public class Canvas extends BaseCanvas {
  ...
  // may be null
  private Bitmap mBitmap;
  
  public Canvas(@NonNull Bitmap bitmap) {
    ...
    mBitmap = bitmap;
    ...
  }
  
  public void setBitmap(@Nullable Bitmap bitmap) {
    ...
    mBitmap = bitmap;
  }
}

实际绘制就是绘制在canvas所持有的Bitmap上。

Drawable
抽象类,通常使用drawable资源方式获取drawableduixinag

资源类型文件后缀Drawable类型
Bitmap File.png .jpg .gifBitmapDrawable
Nine-Patch File.9.pngNinePatchDrawable
Shape Drawable.xmlShapeDrawable
State List.xmlStateListDrawable

paint

画笔

资源类型文件后缀备注
setStyle(Style style)设置绘制模式FILL , STROKE 和 FILL_AND_STROKE 。FILL 是填充模式,STROKE 是画线模式(即勾边模式)FILL_AND_STROKE 是两种模式一并使用:既画线又填充。它的默认值是 FILL ,填充模式
setStrokeWidth(float width)设置线条宽度
setTextSize(float textSize)设置文字大小
setAntiAlias(boolean aa)设置抗锯齿开关是否开启抗锯齿,没有开启抗锯齿的时候,图形会有毛片现象,默认是不开启的。

canvas api

https://developer.android.com/reference/android/graphics/Canvas.html

setXfermode

Xfermode国外有大神称之为过渡模式,这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式,因为所谓的“过渡”其实就是图像混合的一种,这个方法跟我们上面讲到的setColorFilter蛮相似的。查看API文档发现其果然有三个子类:AvoidXfermode, PixelXorXfermode和PorterDuffXfermode,这三个子类实现的功能要比setColorFilter的三个子类复杂得多。

https://www.cnblogs.com/tianzhijiexian/p/4297172.html

重点学习这个 PorterDuffXfermode
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值