您的位置:首页 > 移动开发 > Android开发

Android复习笔记1

2016-04-22 15:23 309 查看
图形差异化处理

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: