1. 버튼 클릭시 WindowManager를 이용하여 원형이미지를 첨부한 View를 팝업.
2. View에 onTouchListener 추가
3. onTouch()
@Override
public boolean onTouch(View v, MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
int action = event.getAction();
if (action == MotionEvent.ACTION_OUTSIDE){
이미지뷰.setVisibility(View.INVISIBLE);
팝업윈도우.dismiss();
return false;
} else if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE){
int degree = getDegree(touchX, touchY);
int area = getArea(degree);
이미지뷰.setVisibility(View.VISIBLE);
selectMenu(area);
} else if (action == MotionEvent.ACTION_UP){
이미지뷰.setVisibility(View.INVISIBLE);
** 메뉴를 선택하고 touch를 떼었을때 이벤트 실행 **
return false;
}
return true;
}
4. 유져가 touch한 x,y좌표로 각도를 계산
private int getDegree(float x, float y){
int centerX = 이미지뷰.getWidth() / 2;
int centerY = 이미지뷰.getHeight() / 2;
float calcX = x - centerX;
float calcY = y - centerY;
double tan = Math.atan2(calcY, calcX);
double result = 180 * tan / Math.PI;
int degree = - ((int) Math.round(result));
if (degree < 0){
degree = 360 + degree;
}
return degree;
}
5. 각도를 기반으로 터치한 부분의 구역번호를 구함
private int getArea(int degree){
if (degree >= 0 && degree < 60){
return 3;
} else if (degree >= 60 && degree < 120){
return 2;
} else if (degree >= 120 && degree < 180){
return 1;
} else if (degree >= 180 && degree < 240){
return 6;
} else if (degree >= 240 && degree < 300){
return 5;
} else if (degree >= 300 && degree < 360){
return 4;
} else {
return 0;
}
}
6. 구역번호를 바탕으로 이벤트 실행
private void selectMenu(int areaCode){
switch(areaCode){
case 0:
이미지변환, 텍스트색상 변경 등등
break;
이하 생략
}
}
너무 대충 써놔서 도움이 되셨는지 모르겠네요..;;