图形差异化处理
Shader
BitmapShader, ComposeShader, LinearGradient 直的
RadialGradient环形 弯的/与圆心等距环上颜色相同 实现某一区域内颜色的环形渐变效果 设置圆心 环形的半径
SweepGradient径向 弯的/与中心的连线上颜色相同 扫描渲染,就是以某个点位中心旋转一周所形成的效果 设置中心点
(左上/右下...)X轴正向顺时针
Paint.Style
FILL:填充内部(默认)
STROKE:只描边
FILL_AND_STROKE:填充内部与描边STROKE:只描边
Paint.Cap 画笔开始画的第一点与最后一点
BUTT:笔触是长方形且不超过路径(默认)
ROUND:笔触是圆形
SQUARE:笔触是正方形
Paint.Join 比如你的线是由多条小线拼接而成,拼接处的形状
MITER:接合处为锐角(默认)
ROUND:接合处为圆弧
BEVEL:接合处为直线
setShadowLayer
MAC的字体——Monaco字体
Typeface typeFace =Typeface.createFromAsset(getAssets(),"font/MONACO.ttf");
skew(float sx, float sy)
都是tan值!比如要在x轴方向上倾斜60度,那么小数值对应:tan 60 = 根号3 = 1.732!
save()往栈压入一个Layer,restore()弹出栈顶的一个Layer,这个Layer代表Canvas的 状态!
rotate()旋转的是整个坐标轴
getSaveCount() restoreToCount() 1最小
saveLayer() ALL_SAVE_FLAG
clipPath( ),clipRect( ),clipRegion( );
Region:可以理解为区域组合,比如可以将两个区域相加,相减,并,疑惑等!
Region.Op
DIFFERENCE:A和B的差集范围,即A - B,只有在此范围内的绘制内容才会被显示;
INTERSECT:即A和B的交集范围,只有在此范围内的绘制内容才会被显示
UNION:即A和B的并集范围,即两者所包括的范围的绘制内容都会被显示;
XOR:A和B的补集范围,此例中即A除去B以外的范围,只有在此范围内的绘制内容才会被显示;
REVERSE_DIFFERENCE:B和A的差集范围,即B - A,只有在此范围内的绘制内容才会被显示;
REPLACE:不论A和B的集合状况,B的范围将全部进行显示,如果和A有交集,则将覆盖A的交集范围;
canvas.clipRect(10, 10, 110, 110); //第一个
canvas.clipRect(50, 50, 150, 150, Region.Op.DIFFERENCE); //第二个
Path 轮廓
//根据原始位图与Matrix创建新图片
Bitmap bitmap = Bitmap.createBitmap(mBitmap,0,0,width,height,matrix,true);
drawBitmapMash
android.graphics.Camera 实现简单的3D效果
rotateX 翻转
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
preTranslate函数是在旋转前移动而postTranslate是在旋转完成后移动,主要作用是让对象围绕自己的中心二旋转
从Camara的API中可以看出来其不提供变形中心点的设置方法,那么怎么办呢,基本思路是:假设图片中心点为
(centerX,centerY),既然Camera始终以(0,0)为中心点,那么我先将图形矩阵往左移动centerX,再往上移动
centerY,让(centerX,centerY)正好掐在初始的(0,0)上,这样进行变形的话,中心点就变成了(centerX,
centerY),达到了目的,当然这还没结束,你既然偏移了(-centerX,-centerY),那么变形以后得移回来,然后再往
右下方分别移动centerX,centerY。
Shader
BitmapShader, ComposeShader, LinearGradient 直的
RadialGradient环形 弯的/与圆心等距环上颜色相同 实现某一区域内颜色的环形渐变效果 设置圆心 环形的半径
SweepGradient径向 弯的/与中心的连线上颜色相同 扫描渲染,就是以某个点位中心旋转一周所形成的效果 设置中心点
(左上/右下...)X轴正向顺时针
Paint.Style
FILL:填充内部(默认)
STROKE:只描边
FILL_AND_STROKE:填充内部与描边STROKE:只描边
Paint.Cap 画笔开始画的第一点与最后一点
BUTT:笔触是长方形且不超过路径(默认)
ROUND:笔触是圆形
SQUARE:笔触是正方形
Paint.Join 比如你的线是由多条小线拼接而成,拼接处的形状
MITER:接合处为锐角(默认)
ROUND:接合处为圆弧
BEVEL:接合处为直线
setShadowLayer
MAC的字体——Monaco字体
Typeface typeFace =Typeface.createFromAsset(getAssets(),"font/MONACO.ttf");
skew(float sx, float sy)
都是tan值!比如要在x轴方向上倾斜60度,那么小数值对应:tan 60 = 根号3 = 1.732!
save()往栈压入一个Layer,restore()弹出栈顶的一个Layer,这个Layer代表Canvas的 状态!
rotate()旋转的是整个坐标轴
getSaveCount() restoreToCount() 1最小
saveLayer() ALL_SAVE_FLAG
clipPath( ),clipRect( ),clipRegion( );
Region:可以理解为区域组合,比如可以将两个区域相加,相减,并,疑惑等!
Region.Op
DIFFERENCE:A和B的差集范围,即A - B,只有在此范围内的绘制内容才会被显示;
INTERSECT:即A和B的交集范围,只有在此范围内的绘制内容才会被显示
UNION:即A和B的并集范围,即两者所包括的范围的绘制内容都会被显示;
XOR:A和B的补集范围,此例中即A除去B以外的范围,只有在此范围内的绘制内容才会被显示;
REVERSE_DIFFERENCE:B和A的差集范围,即B - A,只有在此范围内的绘制内容才会被显示;
REPLACE:不论A和B的集合状况,B的范围将全部进行显示,如果和A有交集,则将覆盖A的交集范围;
canvas.clipRect(10, 10, 110, 110); //第一个
canvas.clipRect(50, 50, 150, 150, Region.Op.DIFFERENCE); //第二个
Path 轮廓
//根据原始位图与Matrix创建新图片
Bitmap bitmap = Bitmap.createBitmap(mBitmap,0,0,width,height,matrix,true);
drawBitmapMash
android.graphics.Camera 实现简单的3D效果
rotateX 翻转
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
preTranslate函数是在旋转前移动而postTranslate是在旋转完成后移动,主要作用是让对象围绕自己的中心二旋转
从Camara的API中可以看出来其不提供变形中心点的设置方法,那么怎么办呢,基本思路是:假设图片中心点为
(centerX,centerY),既然Camera始终以(0,0)为中心点,那么我先将图形矩阵往左移动centerX,再往上移动
centerY,让(centerX,centerY)正好掐在初始的(0,0)上,这样进行变形的话,中心点就变成了(centerX,
centerY),达到了目的,当然这还没结束,你既然偏移了(-centerX,-centerY),那么变形以后得移回来,然后再往
右下方分别移动centerX,centerY。