一起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吧(第四百六十三回:自定义属性)