1. 程式人生 > >Android繪製鎖屏功能所涉及的一些重要程式碼

Android繪製鎖屏功能所涉及的一些重要程式碼

   /**
     * 計算兩點之間的角度
     * @param a
     * @param b
     * @return
     */
    public float getDegrees(Point a, Point b) {
        float ax = a.x;// a.index % 3;
        float ay = a.y;// a.index / 3;
        float bx = b.x;// b.index % 3;
        float by = b.y;// b.index / 3;
        float degrees = 0;
        if
(bx == ax) // y軸相等 90度或270 { if (by > ay) // 在y軸的下邊 90 { degrees = 90; } else if (by < ay) // 在y軸的上邊 270 { degrees = 270; } } else if (by == ay) // y軸相等 0度或180 { if (bx > ax) // 在y軸的下邊 90
{ degrees = 0; } else if (bx < ax) // 在y軸的上邊 270 { degrees = 180; } } else { if (bx > ax) // 在y軸的右邊 270~90 { if (by > ay) // 在y軸的下邊 0 - 90 { degrees
= 0; degrees = degrees + switchDegrees(Math.abs(by - ay), Math.abs(bx - ax)); } else if (by < ay) // 在y軸的上邊 270~0 { degrees = 360; degrees = degrees - switchDegrees(Math.abs(by - ay), Math.abs(bx - ax)); } } else if (bx < ax) // 在y軸的左邊 90~270 { if (by > ay) // 在y軸的下邊 180 ~ 270 { degrees = 90; degrees = degrees + switchDegrees(Math.abs(bx - ax), Math.abs(by - ay)); } else if (by < ay) // 在y軸的上邊 90 ~ 180 { degrees = 270; degrees = degrees - switchDegrees(Math.abs(bx - ax), Math.abs(by - ay)); } } } return degrees; }
   /**
     * 1=30度 2=45度 4=60度
     * 
     * @param tan
     * @return
     */
    private float switchDegrees(float x, float y) {
            return (float) MathUtil.pointTotoDegrees(x, y);
    }
   /**
     * 兩點間的距離
     * @param x1
     * @param y1
     * @param x2
     * @param y2
     * @return
     */
  public static double distance(double x1, double y1, double x2, double y2) {
        return Math.sqrt(Math.abs(x1 - x2) * Math.abs(x1 - x2)
                + Math.abs(y1 - y2) * Math.abs(y1 - y2));
    }
/**
 * 計算點a(x,y)的角度
 * 
 * @param x
 * @param y
 * @return
 */
public static double pointTotoDegrees(double x, double y) {
    return Math.toDegrees(Math.atan2(x, y));
}
       /**
         * 滑鼠的座標是否和九宮格中的點重合
         * @param pointX 點的x座標
         * @param pointY 點的y座標
         * @param r 九宮格中的點的半徑
         * @param movingX 滑鼠的x座標
         * @param movingY 滑鼠的y座標
         */
        public static boolean with(float pointX,float pointY,float r,float movingX,float movingY) {
            // 開方
            return Math.sqrt((pointX - movingX) * (pointX - movingX) + (pointY - movingY) * (pointY - movingY)) < r;
        }