文字与图像的绘制

来源:互联网 发布:中国税务网络大学门 编辑:程序博客网 时间:2024/04/28 00:00

Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。

把一个Bitmap封装成BitmapDrawable对象:BitmapDrawable drawable = new BitmapDrawable(bitmap)

把一个BitmapDrawable对象里取出Bitmap:getBitmap();


对Bitmap图像的变化

CreateBitmap(),CraeteScaledBitmap()


根据不同数据源创建Bitmap

decodeByteArray(),decodeFile(),decodeFileDescriptor,decodeResource(),decodeStream();


Bitmap的回收

isRecycled(),该Bitmap对象是否已被回收。recycle(),强制一个Bitmap对象回收自己。


Android绘图

一、基础篇  Canvas

安卓Android的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法。重写onDraw方法涉及到一个绘图API:Canvas,代表依附于指定View的画布。


Canvas状态(属性)有如下:

1)layer 图层(绘制图层、shade图层)     2)filters 过滤器      3)save/restore stack 绘制状态栈      4)Matrix变换      5)clip stack 裁剪栈


Canvas的方法如下:

1)绘制相关

绘制点  drawPoint   /  drawPoints

绘制弧线 drawArc()绘制直线/绘制多条线  drawLine()  /  drawLines()

绘制矩形 drawRect()     绘制圆角矩形 drawRoundRect()

绘制椭圆  drawOval()                       绘制圆  drawCicle()

按路径绘制任意形状  drawPath()          

绘制文字  drawText()       按路径绘制文字 drawTextOnPath()         drawTextRun()     

按给定的位置绘制文字drawPosText       

绘制位图 drawBitmap()  保存绘制前和绘制后的画布状态的绘制图片 drawPicture(Picture picture)

向画布填充颜色 drawARGB()      drawRGB()         drawColor()  

其他绘制: drawVertices()


2)裁剪相关

剪切矩形     clipRect()  剪切指定区域    clipRegion(Region region)        按Path裁剪 clipPath()


3)get 获取

getClipBounds();   获取画布的密度 getDesity()  , getDrawFilter()  ,  获取画布的高和宽  getHeight() getWidth(),  getMatrix(),  

获取在该画布上能画出的位图的最大高和宽getMaximumBitmapHeight() ,getMaximumBitmapWidth()

获取保存画布状态的次数  getSaveCount() ,


4)判断相关

 判断该绘制是否有硬件加速  isHardwareAccelerated()

判断当前绘制的图层是否不透明   isOpaque(), 


5)Matrix操作

判断某特定区域(方法参数一表示的)过Matrix变换后是否完全移出了当前裁剪区域  quickReject()

保存当前Matrix变换和裁剪变换到一个栈中  save() ,save(int saveFlags),

保存该画布内外Matrix变换和裁剪变换状态到栈中, saveLayer();

移除所有对Matrix变换和裁剪变换的修改的状态 restore(),该方法与save()方法配套使用。restoreToCount()

Matrix变换的旋转 rotate(),Matrix变换的大小变化  scale() ,Matrix变换之平移 translate() ,Matrix变换之倾斜  skew()


6)set 设置

setMatrix(),setDensity() ,     setBitmap(),     setDrawFilter(),


二、基础篇  Paint

1、Paint涉及到的方法:

get 获取

获取透明度  getAlpha ,获取画笔颜色  getColor() ,  返回画笔的Flag值getFlags(),

返回字体特征值 getFontFeatureSettings() ,

返回推荐的行间距对象 getFontMetrics(), 返回推荐的行间距数值 getFontMetricsInt(),返回行空间值 getFontSpacing()

返回画笔 hinting mode  getHinting(),返回字母间距 getLetterSpacing(),getMaskFilter(),

返回某个字符最靠近水平方向的序号  getOffsetForAdvance(),   获取画笔PathEffect对象getPathEffect() 

返回光标位置   getRunAdvance() ,

getShader(),  getStrokeCap(),getStrokeJoin(), getStyle(),getTypeface(),  getXfermode()

返回文字对其方式对Paint.Align getTextAlign(),

获取笔冠 getStrokeMiter(),getSrokeWidth(), getTextBounds(),getTextLocale() ,getTextPath(), getTextScaleX()

getTextSize(),getTextSkewX(),getTextWidths(), getTextWidths(),


判断

 getColorFilter() ,

Flag相关: hasGlyph(),isElegantTextHeight() , isFakeBoldText(),  isFilterBitmap(),isLineText(), isStrikeThruText()

isSubppixelText(), isUnderLineText(),


set 设置类

画笔恢复初始状态reset(),  set(Paint paint), setARGB(),setAlpha(), setColor(),  setColorFilter(),

Flag相关:setDither(boolean dither),setElegantTextHeight(),setFilterBitmap(),setFlags(),

setFontFeatureSetting(),setHinting(),setLetterSpacing(),setLinearText(),setMaskFilter(),,setShader(),

设置渐变效果setShadowLayer(),设置路径显示效果setPathEffect(),

 setStrokeCap(),setStrokeJoin(),setStrokeMiter(),setStrokeWidth(),setStyle(),setSubpixelText(),setTextAlign(),

setTextLocale(),setTextSize(),setTypeface(),,setXfermode()

设置文字删除线setStrikeThruText(),设置文字倾斜setTextSkewX(),设置文字下划线setUnderlineText(),设置文字粗体显示setFakeBoldText(),文字水平拉伸setTextScaleX(),

其他

返回当前字样和字号下距离文字基准线的上方距离    ascent()    

返回当前字样和字号下距离文字基准线的上方距离    descent()  

返回在画布范围内的字体大小的值   breakText()        清除clearShadowLayer(),获取文字宽度measureText


三 、Path

一次完整的路径叫做contour

基础用法:

moveTo(float x,float y),设置contour的起始位置(x,y),lineTo(float x,float y),从结尾处开始,到(x,y)坐标连成线

close(),关闭当前contour。

内部类:

1)Path.Direction 枚举类型 

有两种值:Path.Direction.CCW(counter-clockwise) 逆时针方向,Path.Direction.CW顺时针方向

2)Path.FillType 枚举类型:EVEN_ODD,INVERSE_EVEN_ODD,WINDING,INVERSE_WINDING,

3)Path.Op  枚举类型  DIFFERENCE , INTERSECT, REVERSE_DIFFERENCE,  UNION, XOR

该枚举值用来表示后添加的路径与原有的路径的组合方式类型。

涉及到的方法:

1>addXXX类型,向原有的Path里添加一个新的Path,这两个Path组合生成新的Path,这种组合的具体逻辑通过Path.Op来设置。

2>判断类  isConvex()   isEmpty()   isInverseFileType()    isRect()    

3>set设置类   

op(), set() ,setFillType(),setLastPoint(),setLastPoint(),

4>其他

transform(),toggleInverseFillType(),


2、Paint的内部类

1) Paint.Style   枚举类,共有三个值:STROKE ,FILL,FILL_AND_STROKE  

2) Paint.Align

3) Paint.Cap

4) Paint.FontMetrics

5) Paint.Join





0 0