自定义View-Point类和PointF类

Point 类和 PointF 类:
Point 类是一种最简单的结构,代表一个“点”,实现了 Parcelable 接口,支持序列化与反序列化。Point 类定义了两个 int 成员 x 和 y,代表点的 x 坐标和 y 坐标,图形坐标系与数学中的平面坐标系有所不同,x 方向向左为负,向右为正,y 方向向上向负,向下为正,图形坐标系的原点在左上角,这一点要特别注意,所以,默认情况下,当 x、y 为正数时该点会显示在屏幕之内(取决于屏幕大小),如果为负数就显示在屏幕之外。在 Android 中,通过相应的 API 是可以对图形坐标系进行平移和旋转的。

Point 类作为一种最简单的数据结构,提供的也只有简单的功能,大概如下:
初始化点的 x、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。改变 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 的偏移量,正负符号决定坐标偏移的方向。


序列化与反序列化:重写了 Parcelable 接口的 writeToParcel()、readFromParcel()等相关方法,虽然 Java 中也有序列化接口 Serializable,但是 Parcelable 的效率更高、性能更好。


PointF 类和 Point 类的定义是完全一样的,最大的不同就是成员变量 x、y 的类型不是 int 而是 float,这也是加了后缀“F”的原因。不过,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 FloatMath.sqrt(x * x + y * y);
}


你可能感兴趣的:(Android,Android,自定义控件)