第51章、绘制简单图形(从零开始学Android)

转自:http://blog.csdn.net/jianghuiquan/article/details/8569153

在android中绘图,主要通过画布Canvas和画笔Paint共同作用完成的,其绘图机制可以描述成画笔在画布上的绘制过程,这两个类都在包android.graphics下面。画笔(Paint类)提供了颜色、样式设置等画笔的常规设置。这些设置可以分为两类:一类是图形绘制的相关设置,一类是文本绘制的相关设置。

  我们在本例中绘制一个矩形与圆,由于通过自定义View代替布局文件,故而不需要使用布局文件。 

一、程序文件

  1、新建GraphicsView.java文件。

  在“src/com.genwoxue.graphics”位置,新建GraphicsView.java文件。

  

  GraphicsView.java文件源代码如下:

 

[java] view plaincopy
  1. package com.genwoxue.graphics;  
  2.   
  3. import android.content.Context;    
  4. import android.graphics.Canvas;  
  5. import android.graphics.Paint;  
  6. import android.graphics.Color;  
  7. import android.view.View;  
  8.   
  9.   
  10. public class GraphicsView extends View{  
  11.       
  12.     //声明画笔  
  13.     Paint paint=null;  
  14.                   
  15.     public GraphicsView(Context context) {     
  16.         super(context);  
  17.           
  18.         /*---------------------------------------------- 
  19.          * 部分书籍中把Paint paint=new Paint();放在onDraw方法中,建议 
  20.          * 尽量不要把初始化画笔放在onDraw方法中,这是因为:onDraw经常会运行 
  21.          * 到的,不要在里面new对象,越少越好,不然很浪费内存 
  22.          *--------------------------------------------*/          
  23.         //获取画笔,初始化画笔  
  24.         paint=new Paint();  
  25.     }    
  26.       
  27.     @Override  
  28.     protected void onDraw(Canvas canvas){  
  29.         //设置画布背景为白色  
  30.         canvas.drawColor(Color.WHITE);  
  31.           
  32.         //设置画笔为红色  
  33.         paint.setColor(Color.RED);  
  34.         //使用当前画笔绘制一个左上角坐标为80,20,右下角坐标为360,180的矩形  
  35.         canvas.drawRect(80,20,360,180, paint);  
  36.           
  37.         //设置画笔为红色  
  38.         paint.setColor(Color.GREEN);  
  39.         //使用当前画笔绘制一个圆心坐标为220,100,半径为60的圆  
  40.         canvas.drawCircle(220,10060, paint);  
  41.     }  
  42.   
  43. }  



  2、打开MainActivity.java主文件

  打开“src/com.genwoxue.graphics/MainActivity.java”文件。

  MainActivity.java文件源代码如下:

[java] view plaincopy
  1. package com.genwoxue.graphics;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5.   
  6. public class MainActivity extends Activity {  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.           
  12.         //实例化GraphicsView  
  13.         GraphicsView gv = new GraphicsView(this);   
  14.           
  15.         /* 在以前我们通过setContentView(R.layout.activity_main)显示布局文件 
  16.          * 本例中使用GraphicsView对象gv代替以前布局文件 
  17.          */  
  18.         setContentView(gv);  
  19.     }  
  20.   
  21. }  


二、运行结果

  

 

 

附:Canvas与Paint常见方法与属性

 

A、图形绘制类的相关设置:

* 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);

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

B、文本绘制设置

* 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常用的绘图方法


posted on 2015-06-13 21:56  moffis  阅读(200)  评论(0编辑  收藏  举报

导航