一起Talk Android吧(第四百零三回:绘图基础知识)

各位看官们,大家好,上一回中咱们说的是"如何使用GridLayout布局"的例子,这一回中咱们介绍的例子是"绘图基础知识"。闲话休提,言归正转,让我们一起Talk Android吧!

使用背景

看官们,在实际的项目中需要自定义组件,这时会使用绘图相关的知识。比如我们想画一个房子,上面是三角形,下面是矩形。Android中没有提供这样的组件,我们只能自己去绘制这样的图形。

有看官说,可以使用PS画个房子图片然后通过ImageView显示出来,这也是一种方法,不过需要提前准备好房子的图片才可以,而且与自己绘制一个房子相比,导入图片占用的资源比较高。本章回中我们将介绍基础的绘图知识。

绘图画笔

绘图离不开画笔,Android使用Paint类对象表示画笔,我们可以设置画笔的颜色,宽度(strokeWidth),风格(style,如实心,空心),字体大小、透明度等属性。这样就打造了一个五颜六色、形状各异的画笔。使用不同颜色的画笔就能画出不同颜色的图形,这和现实生活中我们使用彩色笔作画完全一样。

绘图画布

绘图也离不开画布,Android中使用Canvas类对象表示画布,Canvas类提供了各种DrawXXX方法,使用这些方法可以画背景,以及有形状的图形,比如直线,圆形,文字等。画布相当于一个背景或者说一张纸,在画布上面画图需要使用画笔。

绘图示例

我们绘图时不需要自己创建画布,因为控件的onDraw()方法已经提供了画布,我们只需要重写此方法就可以了。画笔需要我们去创建,不过不要在onDraw()方法中创建画笔,此方法的调用太频繁了,频繁的创建对象会导致GC频繁调用进面影响程序性能.

下面是一个示例程序,请大家参考:

  • 1.创建View的子类House;
  • 2.在House子类中创建房子的长度和宽度,以及画笔对象;
  • 3.在House子类中重写onDraw方法,并且在这里绘制房子;
// 1.创建View的子类House;
public class DashboardView extends View {
    private Paint mHousePaint;
    private int startX;
    private int startY;
    private int houseWidth ;
    private int houseHeight;


   // 2.在House子类中创建房子的长度和宽度,以及画笔对象;
   //这个方法需要放到House类的构造方法中,构造方法一共四个省略不写
    private void initPaint() {
        mHousePaint = new Paint();
        mHousePaint.setColor(Color.BLUE);
        startX = 100;
        startY = 100;
        houseWidth = 90;
        houseHeight = 70;
    }

    // 3.在House子类中重写onDraw方法,并且在这里绘制房子;
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawHouse(canvas);
    }
 
    private void drawHouse(Canvas canvas) {
        //画房子顶部的/
        canvas.drawLine(startX,startY,startX+houseWidth,startY-houseWidth,mHousePaint);
        //画房子顶部的\
        canvas.drawLine(startX+houseWidth,startY-houseWidth,startX+houseWidth+houseWidth,startY,mHousePaint);
        //画房子底部的部的矩形
        canvas.drawRect(startX,startY,3*houseWidth,startY+houseHeight,mHousePaint);
    }
}

上面的代码中都添加了注释,以方便大家理解。绘制房子的过程封装成了一个独立的方法,我们详细说一下绘制的整体思路:房子顶部是一个三角形,不过我们只画了两条八字形状的线,房子底部是一个标准的矩形。这里需要自己手动计算一下各个线的坐标。

看官们,关于Android中"绘图基础知识"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值