** Canvas **
画布:需要:
- 一个Bitmap去持有像素
- Canvas托管绘制调用,绘制在Bitmap上,
- 一个绘制原型,比如矩形 path,test,bitmap
- 一个画笔,绘制的颜色和样式
** 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 .gif | BitmapDrawable |
Nine-Patch File | .9.png | NinePatchDrawable |
Shape Drawable | .xml | ShapeDrawable |
State List | .xml | StateListDrawable |
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