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

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起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中"绘图基础知识"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百零三回:绘图基础知识)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百二十三回:给图片添加阴影)

一起Talk Android吧(第五百零三回:解决retrofit被混淆后代码出错的问题)

一起Talk Android吧(第四百零四回:画笔常用参数设置)

一起Talk Android吧(第四百六十三回:自定义属性)

一起Talk Android吧(第四百九十三回:动画知识总结)

一起Talk Android吧(第四百四十三回:UI控件之NumberPicker)