Android图形 —— 从哪里开始?

于 2014年09月15日 发布在 android开发 跳到评论

你一定遇到过Android现有的UI控件无法满足项目需求的情况,一般来说你可能需要将多个UI组合起来,或者说需要自己控制一些触摸事件,又或者为了得到更好的图形效果等等。这个时候就需要自定义控件了。

自定义控件的一个重点就是实现就是去重写他的绘制过程,也就是View.onDraw(Canvas canvas)方法。这个里面就是绘制图形的过程了,比如说一个Button,绘制按钮和按钮上的文字都是在它自己的onDraw方法中完成的。如果你想给ImageView加个蒙版,可以继承ImageView并且重写他的onDraw方法,调用完父类的onDraw之后,再自己Canvas来画一个黑色的半透明矩形,这样就可以对现有的控件进行加工了。

Canvas是什么呢?是画布,你绘制东西的时候就是绘到了这个画布上,给用户显示的东西也是这个画布上的东西。通常来说,当你调用到onDraw方法的时候对应的View已经确定了他的宽度和高度(关于View的measure和layout过程以后再详述)。那么在Canvas上,你画的范围就只有View对应的大小了。我们用代码来描述下:

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int verticalCenter    =  getHeight() / 2;
        int horizontalCenter  =  getWidth() / 2;
        int circleRadius      = 200;
        Paint paint = new Paint();
        paint.setAntiAlias(false);
        paint.setColor(Color.RED);
        canvas.drawCircle( horizontalCenter, verticalCenter-250, circleRadius, paint);

        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(20);
        canvas.drawCircle( horizontalCenter, verticalCenter+250, circleRadius, paint);
    }

这个View的大小可以通过getHeight()和getWidth()来获得。我们准备画两个圆圈,半径都是200。我们主要用到的方法是drawCircle()方法,参数的意义分别是圆心的x,y坐标,半径和所使用的画笔Paint。

Paint是什么?是画笔的意思,Canvas是画布,Paint是画笔,画笔控制了所画东西的颜色大小字体等等。在画第一个圆的时候,我们通过Paint.setAntiAlias方法设置抗锯齿属性为false,并设置颜色为红色。

在画第二个圆的时候,我们打开了抗锯齿。将Paint的风格设为STROKE,也就是只画边框。然后设置边框宽度为20.

你可以将上面的代码运行一下(Demo的github地址:https://github.com/fookwood/AndroidGraphicsDemo

1410763868_full.png

所画出来的东西是符合我们预期的。上面的圆是实心,下面的是空心,而且上面的圆边缘会有锯齿感,而下面的没有。在用Canvas绘制一些矢量图形的时候,比如矩形,圆形,文字的时候我们通常会通过Paint打开抗锯齿。

本文共有 2条评论 | 沙发:文章评论

  1. heramerom说道:

    开篇第一句的 “UI空间”是不是写错了?

留下评论!

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)