Android繪製鎖屏功能所涉及的一些重要程式碼
阿新 • • 發佈:2019-01-08
/**
* 計算兩點之間的角度
* @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;
}