在上一篇博客中,我们基本了解了Android中View的绘制流程,知道了绘制流程以后,是不是想要马上写一些自定义控件来玩一下呢?不急,在这一篇博客中,我们先来了解一下Android给我们提供的一些常见的绘图的API。绘图的API是什么呢,我就用一个比喻吧。当Android工程师在自定义view是就相当于一个画家,那么画家作画是不是需要了工具了,如画板、画布、画笔以及颜料等,而Android系统也给我们提供了很多这样的工具,就是Android中的一些绘图相关的API。这篇文章主要介绍Point/PointF、Rect/RectF、Bitmap/BitmapDrawable几个类;在下一篇文章中将主要介绍Paint类和Canvas类。
1.Point类和PointF类(讨论的是android.graphics包下面的,不是java.awt包下面的)
Point类是一个简单的类,代表一个"点",实现了Parcelable序列化接口,支付序列化和反序列化。Point类中定义了两个成员变量x和y,表示一个点的横坐标和纵坐标。在Android中的坐标与数学中的平面坐标有所不同,Android中x轴向右为正,向左为负;y轴向下为正,向上为负,坐标原点在屏幕的左上角,也就是说屏幕内的所有点不管是x坐标还是y坐标都是正数。
Point类作为最简单的类,提供的功能也很简单
① 通过Point类创建一个点的方法
// 创建一个新的点
public Point() {}
// 根据x,y坐标创建一个新的点
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// 通过一个点创建一个新的点,就是将一个点的坐标赋值给另一个点
public Point(Point src) {
this.x = src.x;
this.y = src.y;
}
② 对Point点进行操作的方法
// 对点进行重新设置x和y
public void set(int x, int y) {
this.x = x;
this.y = y;
}
// 将x和y取反值
public final void negate() {
x = -x;
y = -y;
}
// 对x和y的值做改变,dx、dy表示偏移量,正负号决定偏移的方向
public final void offset(int dx, int dy) {
x += dx;
y += dy;
}
③ 判断方法
// 通过x和y坐标判断是否为同一点
public final boolean equals(int x, int y) {
return this.x == x && this.y == y;
}
// 判断一个对象是否和当前点是否是同一个点或者重合
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
if (x != point.x) return false;
if (y != point.y) return false;
return true;
}
PointF类和Point类功能和用法完全一样,唯一不同的就是Point类的成员变量x、y是int类型的;PointF类的成员变量x、y是float类型的。