安卓使用Canvas画图分析

安卓使用除了使用已有图片之外,还可以画图。前者由drawable完成,而后者则由Canvas等完成。本篇探讨后者,安卓画图涉及到的类,以及绘图机制的研究。

绘制一副图形,有四个基本构成:一个hold像素点的Bitmap;一个进行绘制调用(写到bitmap中)的Canvas;一个基本绘画图形(例如Rect,Path,text,Bitmap),和一支画笔(定义了线条的颜色,样式等;Paint类)。

Canvas:

Canvas有两个构造函数:

  • Canvas(),空的构造函数,使用这个构造函数表明是绘制到一块空白的画布上。此时Bitmap不必要。
  • Canvas(Bitmap bitmap),接下来的图形是绘制到这个bitmap上的。

接下来看看Canvas的两个public函数,理解Canvas是怎么进行“绘制调用”的。

void drawRect(Rect r, Paint paint);

void drawRect(float left, float top, float right, float bottom, Paint paint);

看看上面两个函数的应用实例:

Canvas canvas = new Canvas();
Paint paint = new Paint();
RectF re1 = new RectF(10, 240, 70, 270);
canvas.drawRect(re1, paint);
canvas.drawRect(10, 240, 70, 270);

从上面的示例中,可以知道Canvas类中定义了许多图形的绘制方法,比如矩形,圆形,线条,文字等等,这些是进行画图的基本操作。Canvas的作用就是提供这些基本操作的调用。

至于Paint类以及画图操作的Rect,Path,Circle等类查看API可以获取它们的应用信息。

那么在应用中如何画图操作是如何应用的呢?如果有Bitmap,那么很简单,直接绘制到这个Bitmap上,那么应用则交给这个Bitmap。Bitmap作为背景图片或作为控件背景等就不需要我们操心了。那么如果是绘制到一块空的画布上呢?这会空的画布有了图形之后如何被应用程序使用呢?查看下面的示例即可明白:

public class MyView extends View{
       public MyView(Context context, AttributeSet set){
                  super(context, set);
       }
       protected void onDraw(Canvas canvas){
                   super.onDraw(canvas);
                   camvas/drawColor(Color.WHITE);
                   Paint paint = new Paint();
                   paint.setColor(Color.BLUE);
                   canvas.drawRect(...);
                   .
                   .
                   .
       }
}
从上面的示例可知,图形最终需要交给某个继承自View的视图控件,而绘制过程则在这个控件的onDraw(canvas)回调中完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值