android编程之图形绘制

双鱼座1990 发布于 2015/12/04 11:10
阅读 404
收藏 3

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

android课堂作业要求做个五子棋游戏,想想如果直接用控件可能速度会比较慢,因此就想用比较常规的游戏编程方法,屏幕绘制.今天查了些资料,并做个整理.

跟其他的屏幕绘制机制一样,android屏幕绘制也需要画布,其次还需要画笔,android的绘制机制可以描述成画笔在画布上的绘制过程.在android中画布用Canvas类来表示,画笔用Paint类来实现,这两个类都在包android.graphics下面.

画笔(Paint类)提供了颜色设置,样式设置等画笔的常规设置,这些设置可以分为两类,一类是图形绘制的相关设置,一类是文本绘制的相关设置.参考文章

  • 图形绘制类的相关设置:

    * setARGB(int a,int r,int g,int b);  

     * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。  

     * setAlpha(int a);  

     * 设置绘制图形的透明度。  

     * setColor(int color);  

     * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。  

    * setAntiAlias(boolean aa);  

     * 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。  

     * setDither(boolean dither);  

     * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰  

     * setFilterBitmap(boolean filter);  

     * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于dither和xfermode的设置  

     * setMaskFilter(MaskFilter maskfilter);  

     * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等       *   

     * setColorFilter(ColorFilter colorfilter);  

     * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果  

     * setPathEffect(PathEffect effect);  

     * 设置绘制路径的效果,如点画线等  

     * setShader(Shader shader);  

     * 设置图像效果,使用Shader可以绘制出各种渐变效果  

     * setShadowLayer(float radius ,float dx,float dy,int color);  

     * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色  

     * setStyle(Paint.Style style);  

     * 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE  

     * setStrokeCap(Paint.Cap cap);  

     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE  

     * setSrokeJoin(Paint.Join join);  

     * 设置绘制时各图形的结合方式,如平滑效果等  

     * setStrokeWidth(float width);  

     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度  

     * setXfermode(Xfermode xfermode);  

     * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  

  • 文本绘制设置
     * setFakeBoldText(boolean fakeBoldText);  

     * 模拟实现粗体文字,设置在小字体上效果会非常差  

     * setSubpixelText(boolean subpixelText);  

     * 设置该项为true,将有助于文本在LCD屏幕上的显示效果  

     * setTextAlign(Paint.Align align);  

     * 设置绘制文字的对齐方向  

     * setTextScaleX(float scaleX);  

    * 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果  

     * setTextSize(float textSize);  

     * 设置绘制文字的字号大小  

     * setTextSkewX(float skewX);  

     * 设置斜体文字,skewX为倾斜弧度  

     * setTypeface(Typeface typeface);  

     * 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等  

     * setUnderlineText(boolean underlineText);  

     * 设置带有下划线的文字效果  

     * setStrikeThruText(boolean strikeThruText);  

     * 设置带有删除线的效果 


如果说画笔决定了画的颜色、风格的话,那画布则决定能画那些元素,以及如何绘制这些元素。在Android中Canvas提供了如下方法用来绘制图形元素。

boolean clipPath(Path path)
使用指定路径来裁剪图形,canvas对此方法进行了多次重载,除了使用指定路径来裁剪还可以使用矩形、范围等方式,
此外还可以设置裁剪区域内的图形叠加效果.如果相交、替换等。详见方法clipPath(Path path, Region.Op op)、clipRect(Rect rect, Region.Op op)等
void         drawColor(int color)
设置整个画布的背景颜色
void         drawARGB(int a, int r, int g, int b)
设置或奥博的背景颜色透明度信息
void         drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

绘制弧形

void         drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
绘制位图,并设置位图矩阵,android对位图绘制方法进行了多次重载,详见drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)等
void         drawCircle(float cx, float cy, float radius, Paint paint)
绘制圆形
void         drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
绘制线段,此外Canvas还提供了绘制线段集合的方法.
void        drawPath(Path path, Paint paint)
绘制路径
void       drawPoint(float x, float y, Paint paint)
绘制点,此外android还提供绘制点的集合
void       drawRect(float left, float top, float right, float bottom, Paint paint)
绘制矩形
void       drawText(String text, float x, float y, Paint paint)
绘制文本
void       scale(float sx, float sy)
画布缩放
void       translate(float dx, float dy)
画布平移
void       rotate(float degrees)
画布旋转

   上面只是列举了Canvas常用的绘图方法,其中不少方法还被多次重载,在此不进行一一说明.

加载中
返回顶部
顶部