public boolean onTouchEvent(MotionEvent event) {
int selectslot=0;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
dx = (int) event.getX();
dy = (int) event.getY();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
mx = (int) event.getX();
my = (int) event.getY();
x = mx - dx;
y = my - dy;
if(x<=20&&x>=-20){
//아래 코드에서 stateView.selectSlot 에서 오류가 납니다.
selectslot = stateView.selectSlot(mx, my);
// 다음 코드는 생략하고요
// 선택된 카드를 확인 하는 코드입니다.(StateView class 안에 있는 코드입니다.)
public int selectSlot(int x, int y) {
int selected_x = x;
int selected_y = y;
int selectedCardNum = 0;
// 카드가 총 13장이고요
for (int i = 0; i <= 12; i++) {
try {
// 여기서 NullPointException 이 발생하는데 이것이 같은 위치를 클릭해도
// 발생할때도 있고 안할 때도 있고
// 그러니까 제가 코딩한대로 제대로 동작하는 경우도 있고 오류나는 경우도 있네요.
if (mSlot[i].isSelected(selected_x, selected_y)) {
selectedCardNum = i;
xx = mSlot[i].mSlotWidth;
yy = mSlot[i].mSlotHeight;
break;
} else {
selectedCardNum = 88;
}
} catch (Exception e) {
selectedCardNum = 88;
}
}
return selectedCardNum;
}
// 아래는 StateView 의 일부 코드 입니다.
public class StateView extends SurfaceView implements SurfaceHolder.Callback {
//여기서 mSlot 를 배열로 선언하고요
public Slot[] mSlot;
@Override
public void onDraw(Canvas canvas) {
// for 문으로 mSlot class 에 위치를 저장합니다.
for (int j = index1; j <= index2; j++) {
mSlot[j] = new Slot(j,
mScreenConfig.nameStartX + mScreenConfig.slotStartX + j
* mScreenConfig.slotSize,
mScreenConfig.nameSizeY + mScreenConfig.nameStartY
+ mScreenConfig.slotGapY, mScreenConfig.slotX,
mScreenConfig.slotY);
}
// 글자수 제한 때문에 코드를 다 넣지 못하네요 ㅠㅠ
// 이것으로라도 오류를 찾을 수 있을지 모르지만 고수님들의 조언을 구합니다.
// JAVA로 처음 하는 작업이라.. 있는 코드 응용해서 제가 손을 봐서 그런지.
// 뜻대로 안되네요..