Point类和PointF类

  参考Android 8.0 源码

/framework/base/graphics/java/android/graphics/Point.java
/framework/base/graphics/java/android/graphics/Point.aidl
/framework/base/graphics/java/android/graphics/PointF.java
/framework/base/graphics/java/android/graphics/PointF.aidl
public class Point implements Parcelable {

}
public class PointF implements Parcelable {

}

Point类

  Point类是一种最简单的结构,代表一个点,实现了Parcelable接口,支持序列化与反序列化。Point类定义了两个int类型的成员变量x和y,代表点的x坐标和y坐标,这里的坐标使用的是安卓坐标系,与数学中的平面坐标系不一样。在这里,x方向向左为负,向右为正;y方向向上为负,向下为正,坐标系的原点在设备屏幕的左上角。默认情况下,当x、y为正数时该点会显示在屏幕内(如果坐标点超出了屏幕,也会不显示的),如果为负数就显示在屏幕之外了。在Android中,通过相应的API是可以对图形坐标系进行平移和旋转的。

  Point类作为一种最简单的数据结构,提供的也只有简单的功能,如下:
1 . 初始化点的x、y坐标:

public int x;
public int y;

public Point() {}

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)坐标值,也可以将一个Point的坐标值复制给另一个Point。

2 . 改变x、y的坐标值:Point类提供了三个方法用于改变Point对象的x、y值,分别为:

public void set(int x, int y) {
    this.x = x;
    this.y = y;
}

public final void negate() {
    x = -x;
    y = -y;
}
  
public final void offset(int dx, int dy) {
    x += dx;
    y += dy;
}

  set()方法为x、y重新赋值,negate()方法将x、y取反,offset()方法则改变x、y的偏移量。

PointF类

  PointF类和Point类的定义是完全一样的,最大的不同就是成员变量x、y的类型不是int,而是float,这也是Point加了后缀F变成了PointF的原因。不过,PointF提供了一个功能,定义了length()方法计算坐标原点(0,0)到(x,y)之间的距离,而且还提供了两个版本:静态的length()和非静态的length()方法,代码如下:

public final float length() { 
    return length(x, y); 
}
    
public static float length(float x, float y) {
    return (float) Math.hypot(x, y);
}

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--------------------last line for now--------------------