private OnRegionListening onRegionListening;
private int imgUp = 1;
private int imgDown = 2;
private int imgLeft = 3;
private int imgRight = 4;
private int imgCenter = 5;
private int status;
private int center;
private int innerCircleRadius;
public RegionView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public interface OnRegionListening {
void onRegionListening(int Region);
void onRegionCancel(int Region);
}
/**
* 方向键盘的监听 1 上 2 下 3左 4右 5ok
*
* @param listening
*/
public void setOnRegionListening(OnRegionListening listening) {
onRegionListening = listening;
}
@Override
public boolean onTouchEvent(MotionEvent paramMotionEvent) {
float f1 = paramMotionEvent.getX();
float f2 = paramMotionEvent.getY();
float f3 = getWidth();
float f4 = getHeight();
center = getWidth()/2;
innerCircleRadius = center / 3;
switch (paramMotionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
status = 0;
if ((f1 > f3 / 3.0F) && (f1 < 2.0F * f3 / 3.0F) && (f2 > f4 / 3.0F) && (f2 < f4 * 2.0F / 3.0F)) {
status = imgCenter;
setImageResource(R.mipmap.navigation_center);
} else {
if (f2 < (f4 / 2)) {
if (f1 < f3 / 3.0F) {
status = imgLeft;
setImageResource(R.mipmap.navigation_left);
} else if (f1 > (f3 / 3.0F) * 2.0F) {
status = imgRight;
setImageResource(R.mipmap.navigation_right);
} else {
status = imgUp;
setImageResource(R.mipmap.navigation_up);
}
} else {
if (f1 < f3 / 3.0F) {
status = imgLeft;
setImageResource(R.mipmap.navigation_left);
} else if (f1 > (f3 / 3.0F) * 2.0F) {
status = imgRight;
setImageResource(R.mipmap.navigation_right);
} else {
status = imgDown;
setImageResource(R.mipmap.navigation_down);
}
}
}
if (onRegionListening != null) {
onRegionListening.onRegionListening(status);
}
break;
case MotionEvent.ACTION_UP:
if (onRegionListening != null) {
onRegionListening.onRegionCancel(status);
}
removeCallbacks(runnable);
post(runnable);
break;
case MotionEvent.ACTION_CANCEL:
removeCallbacks(runnable);
post(runnable);
break;
}
return super.onTouchEvent(paramMotionEvent);
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
setImageResource(R.mipmap.navigation_normal);
}
};
private int checkDir(float x, float y) {
int dir = 0;
if (Math.sqrt(Math.pow(y - center, 2) + Math.pow(x - center, 2)) < innerCircleRadius) {// 判断在中心圆圈内
dir = 5;
System.out.println("----中央");
} else if (y < x && y + x < 2 * center) {
dir = 2;
System.out.println("----向上");
} else if (y < x && y + x > 2 * center) {
dir = 3;
System.out.println("----向右");
} else if (y > x && y + x < 2 * center) {
dir = 1;
System.out.println("----向左");
} else if (y > x && y + x > 2 * center) {
dir = 4;
System.out.println("----向下");
}
return dir;
}
}
调用:
derectionView.setOnRegionListening(new RegionView.onRegionListening() { public void onRegionListening(int direction) { // TODO Auto-generated method stub } @Override public void onRegionCancel(int direction) { switch (direction){ case 1://上 break; case 2://下 break; case 3://左 break; case 4://右 break; case 5://中 break; } } });