enum _Quadrant{
eQ_NONE,
eQ_ONE,
eQ_TWO,
eQ_THREE,
eQ_FOUR
}
设置变量组
canvas.rotate(mRotate,120 ,122);
画布 根据得到的数值转动
设置触摸
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
calcDegree((int)event.getX(), (int)event.getY(), false);
postInvalidate();
break;
case MotionEvent.ACTION_MOVE:
calcDegree((int)event.getX(), (int)event.getY(), false);
postInvalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();
return true;
}
public void calcDegree(int x, int y, boolean flag){
int rx = -(x - (int)xx);
int ry = y - (int)yy;
Point point = new Point(rx, ry);
mRotate = ZhuanpanTestActivity.GetRadianByPos(point);
}
}
public static int GetRadianByPos(Point point) {
// TODO Auto-generated method stub
double dAngle = GetRadianByPosEx(point);
return (int) (dAngle * (360 / (2 * Math.PI)));
}
private static double GetRadianByPosEx(Point point) {
// TODO Auto-generated method stub
if (point.x == 0 && point.y == 0)
{
return 0;
}
//通过算法获得角度值
double Sin = point.x / Math.sqrt(point.x * point.x + point.y * point.y);
double dAngle = Math.asin(Sin);
//通过变量判断角度
switch(GetQuadrant(point))
{
case eQ_NONE:
{
if (point.x == 0 && point.y == 0)
{
return 0;
}
if (point.x == 0)
{
if (point.y > 0)
{
return 0;
}
else
{
return Math.PI;
}
}
if (point.y == 0)
{
if (point.x > 0)
{
return Math.PI/2;
}
else
{
return (float) (1.5*Math.PI);
}
}
}
break;
case eQ_ONE:
{
return dAngle;
}
case eQ_TWO:
{
dAngle = Math.PI - dAngle;
}
break;
case eQ_THREE:
{
dAngle = Math.PI - dAngle;
}
break;
case eQ_FOUR:
{
dAngle += 2*Math.PI;
}
break;
}
return dAngle;
}
private static _Quadrant GetQuadrant(Point point) {
// TODO Auto-generated method stub
if (point.x == 0 || point.y == 0)
{
return _Quadrant.eQ_NONE;
}
if (point.x > 0)
{
if (point.y > 0)
{
return _Quadrant.eQ_ONE;
}
else
{
return _Quadrant.eQ_TWO;
}
}
else
{
if (point.y < 0)
{
return _Quadrant.eQ_THREE;
}
else
{
return _Quadrant.eQ_FOUR;
}
}
}