Android复习笔记1

本文介绍了使用Shader实现图形差异化处理的方法,包括BitmapShader、ComposeShader、LinearGradient、RadialGradient和SweepGradient的不同应用场景。同时涵盖了Paint样式设置、阴影层应用、字体选择、坐标变换、图层管理及路径裁剪等内容。
摘要由CSDN通过智能技术生成
图形差异化处理
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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值