每次在OnTouch中调用ACTION

编程入门 行业动态 更新时间:2024-10-21 03:31:56
每次在OnTouch中调用ACTION_MOVE都会返回相同的值(ACTION_MOVE returns the same value every time it is called in OnTouch)

我试图调用每次调用ACTION_MOVE时使用不同值更新tt​​s元素的方法。 但是,每次调用时都会返回相同的值。 respondCoordinates(v)方法有一个if语句来更改值。

public boolean onTouch(View v, MotionEvent event) { //_gestureDetector.onTouchEvent(event); int eventAction = event.getAction(); // you may need the x/y location int x = (int)event.getRawX(); int y = (int)event.getRawY(); Point boardPos = getBoardIndexX(new Point(x,y)); // put your code in here to handle the event switch (eventAction) { case MotionEvent.ACTION_DOWN: Log.d("Chess", "Down: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); if(OnBoard(boardPos)) { // then play lastPlayTime = System.currentTimeMillis(); lastPlayPos.x = boardPos.x; lastPlayPos.y = boardPos.y; respondCoordinates(v); } break;//return true; case MotionEvent.ACTION_UP: Log.d("Chess", "Up: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); lastPlayPos.x = -1; lastPlayPos.y = -1; v.performClick(); break;//return true; case MotionEvent.ACTION_MOVE: if(boardPos.x != lastPlayPos.x || boardPos.y != lastPlayPos.y) { // then we're on a new square Log.d("Chess", "Move: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); lastPlayPos.x = boardPos.x; lastPlayPos.y = boardPos.y; if(OnBoard(boardPos)) { // then play lastPlayTime = System.currentTimeMillis(); respondCoordinates(v); } } } // tell the View to redraw the Canvas //invalidate(); return true;//super.onTouchEvent(event); } public void respondCoordinates(View v) { int iTo = getIndexOfButton(v); String join = ""; String letter = ""; String number = ""; String piece = ""; if ((iTo >= 0) && (iTo <= 7)) { if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } number = "8"; if (iTo == 0) { letter = "a"; } else if (iTo == 1) { letter = "b"; } else if (iTo == 2) { letter = "c"; } else if (iTo == 3) { letter = "d"; } else if (iTo == 4) { letter = "e"; } else if (iTo == 5) { letter = "f"; } else if (iTo == 6) { letter = "g"; } else if (iTo == 7) { letter = "h"; } } else if ((iTo >= 8) && (iTo <= 15)) { number = "7"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 8) { letter = "a"; } else if (iTo == 9) { letter = "b"; } else if (iTo == 10) { letter = "c"; } else if (iTo == 11) { letter = "d"; } else if (iTo == 12) { letter = "e"; } else if (iTo == 13) { letter = "f"; } else if (iTo == 14) { letter = "g"; } else if (iTo == 15) { letter = "h"; } } else if ((iTo >= 16) && (iTo <= 23)) { number = "6"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 16) { letter = "a"; } else if (iTo == 17) { letter = "b"; } else if (iTo == 18) { letter = "c"; } else if (iTo == 19) { letter = "d"; } else if (iTo == 20) { letter = "e"; } else if (iTo == 21) { letter = "f"; } else if (iTo == 22) { letter = "g"; } else if (iTo == 23) { letter = "h"; } } else if ((iTo >= 24) && (iTo <= 31)) { number = "5"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 24) { letter = "a"; } else if (iTo == 25) { letter = "b"; } else if (iTo == 26) { letter = "c"; } else if (iTo == 27) { letter = "d"; } else if (iTo == 28) { letter = "e"; } else if (iTo == 29) { letter = "f"; } else if (iTo == 30) { letter = "g"; } else if (iTo == 31) { letter = "h"; } } else if ((iTo >= 32) && (iTo <= 39)) { number = "4"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 32) { letter = "a"; } else if (iTo == 33) { letter = "b"; } else if (iTo == 34) { letter = "c"; } else if (iTo == 35) { letter = "d"; } else if (iTo == 36) { letter = "e"; } else if (iTo == 37) { letter = "f"; } else if (iTo == 38) { letter = "g"; } else if (iTo == 39) { letter = "h"; } } else if ((iTo >= 40) && (iTo <= 47)) { number = "3"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 40) { letter = "a"; } else if (iTo == 41) { letter = "b"; } else if (iTo == 42) { letter = "c"; } else if (iTo == 43) { letter = "d"; } else if (iTo == 44) { letter = "e"; } else if (iTo == 45) { letter = "f"; } else if (iTo == 46) { letter = "g"; } else if (iTo == 47) { letter = "h"; } } else if ((iTo >= 48) && (iTo <= 55)) { number = "2"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 48) { letter = "a"; } else if (iTo == 49) { letter = "b"; } else if (iTo == 50) { letter = "c"; } else if (iTo == 51) { letter = "d"; } else if (iTo == 52) { letter = "e"; } else if (iTo == 53) { letter = "f"; } else if (iTo == 54) { letter = "g"; } else if (iTo == 55) { letter = "h"; } } else if ((iTo >= 56) && (iTo <= 63)) { number = "1"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 56) { letter = "a"; } else if (iTo == 57) { letter = "b"; } else if (iTo == 58) { letter = "c"; } else if (iTo == 59) { letter = "d"; } else if (iTo == 60) { letter = "e"; } else if (iTo == 61) { letter = "f"; } else if (iTo == 62) { letter = "g"; } else if (iTo == 63) { letter = "h"; } } join = letter + number + "" + piece; //Log.d("Chess", join); _chessActivity.soundNotification(join); } public int getIndexOfButton(View but){ for(int i = 0; i < 64; i++){ if(_arrImages[i] == ((ChessImageView)but)){ _arrImages[i].setPressed(false); return i; } } return -1; }

I'm trying to call a method to update a tts element with a different value every time the ACTION_MOVE is called. However, it returns the same value every time it is called. The respondCoordinates(v) method has an if statement to change the value.

public boolean onTouch(View v, MotionEvent event) { //_gestureDetector.onTouchEvent(event); int eventAction = event.getAction(); // you may need the x/y location int x = (int)event.getRawX(); int y = (int)event.getRawY(); Point boardPos = getBoardIndexX(new Point(x,y)); // put your code in here to handle the event switch (eventAction) { case MotionEvent.ACTION_DOWN: Log.d("Chess", "Down: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); if(OnBoard(boardPos)) { // then play lastPlayTime = System.currentTimeMillis(); lastPlayPos.x = boardPos.x; lastPlayPos.y = boardPos.y; respondCoordinates(v); } break;//return true; case MotionEvent.ACTION_UP: Log.d("Chess", "Up: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); lastPlayPos.x = -1; lastPlayPos.y = -1; v.performClick(); break;//return true; case MotionEvent.ACTION_MOVE: if(boardPos.x != lastPlayPos.x || boardPos.y != lastPlayPos.y) { // then we're on a new square Log.d("Chess", "Move: " + x + ", " + y + " [" + boardPos.x + ", " + boardPos.y + "]"); lastPlayPos.x = boardPos.x; lastPlayPos.y = boardPos.y; if(OnBoard(boardPos)) { // then play lastPlayTime = System.currentTimeMillis(); respondCoordinates(v); } } } // tell the View to redraw the Canvas //invalidate(); return true;//super.onTouchEvent(event); } public void respondCoordinates(View v) { int iTo = getIndexOfButton(v); String join = ""; String letter = ""; String number = ""; String piece = ""; if ((iTo >= 0) && (iTo <= 7)) { if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } number = "8"; if (iTo == 0) { letter = "a"; } else if (iTo == 1) { letter = "b"; } else if (iTo == 2) { letter = "c"; } else if (iTo == 3) { letter = "d"; } else if (iTo == 4) { letter = "e"; } else if (iTo == 5) { letter = "f"; } else if (iTo == 6) { letter = "g"; } else if (iTo == 7) { letter = "h"; } } else if ((iTo >= 8) && (iTo <= 15)) { number = "7"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 8) { letter = "a"; } else if (iTo == 9) { letter = "b"; } else if (iTo == 10) { letter = "c"; } else if (iTo == 11) { letter = "d"; } else if (iTo == 12) { letter = "e"; } else if (iTo == 13) { letter = "f"; } else if (iTo == 14) { letter = "g"; } else if (iTo == 15) { letter = "h"; } } else if ((iTo >= 16) && (iTo <= 23)) { number = "6"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 16) { letter = "a"; } else if (iTo == 17) { letter = "b"; } else if (iTo == 18) { letter = "c"; } else if (iTo == 19) { letter = "d"; } else if (iTo == 20) { letter = "e"; } else if (iTo == 21) { letter = "f"; } else if (iTo == 22) { letter = "g"; } else if (iTo == 23) { letter = "h"; } } else if ((iTo >= 24) && (iTo <= 31)) { number = "5"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 24) { letter = "a"; } else if (iTo == 25) { letter = "b"; } else if (iTo == 26) { letter = "c"; } else if (iTo == 27) { letter = "d"; } else if (iTo == 28) { letter = "e"; } else if (iTo == 29) { letter = "f"; } else if (iTo == 30) { letter = "g"; } else if (iTo == 31) { letter = "h"; } } else if ((iTo >= 32) && (iTo <= 39)) { number = "4"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 32) { letter = "a"; } else if (iTo == 33) { letter = "b"; } else if (iTo == 34) { letter = "c"; } else if (iTo == 35) { letter = "d"; } else if (iTo == 36) { letter = "e"; } else if (iTo == 37) { letter = "f"; } else if (iTo == 38) { letter = "g"; } else if (iTo == 39) { letter = "h"; } } else if ((iTo >= 40) && (iTo <= 47)) { number = "3"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 40) { letter = "a"; } else if (iTo == 41) { letter = "b"; } else if (iTo == 42) { letter = "c"; } else if (iTo == 43) { letter = "d"; } else if (iTo == 44) { letter = "e"; } else if (iTo == 45) { letter = "f"; } else if (iTo == 46) { letter = "g"; } else if (iTo == 47) { letter = "h"; } } else if ((iTo >= 48) && (iTo <= 55)) { number = "2"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 48) { letter = "a"; } else if (iTo == 49) { letter = "b"; } else if (iTo == 50) { letter = "c"; } else if (iTo == 51) { letter = "d"; } else if (iTo == 52) { letter = "e"; } else if (iTo == 53) { letter = "f"; } else if (iTo == 54) { letter = "g"; } else if (iTo == 55) { letter = "h"; } } else if ((iTo >= 56) && (iTo <= 63)) { number = "1"; if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.PAWN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.PAWN) { piece = "Pawn"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.BISHOP || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.BISHOP) { piece = "Bishop"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.ROOK || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.ROOK) { piece = "Rook"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KNIGHT || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KNIGHT) { piece = "Knight"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.QUEEN || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.QUEEN) { piece = "Queen"; } else if (_jni.pieceAt(BoardConstants.WHITE, iTo) == BoardConstants.KING || _jni.pieceAt(BoardConstants.BLACK, iTo) == BoardConstants.KING) { piece = "King"; } if (iTo == 56) { letter = "a"; } else if (iTo == 57) { letter = "b"; } else if (iTo == 58) { letter = "c"; } else if (iTo == 59) { letter = "d"; } else if (iTo == 60) { letter = "e"; } else if (iTo == 61) { letter = "f"; } else if (iTo == 62) { letter = "g"; } else if (iTo == 63) { letter = "h"; } } join = letter + number + "" + piece; //Log.d("Chess", join); _chessActivity.soundNotification(join); } public int getIndexOfButton(View but){ for(int i = 0; i < 64; i++){ if(_arrImages[i] == ((ChessImageView)but)){ _arrImages[i].setPressed(false); return i; } } return -1; }

最满意答案

我想我正确地理解了这个问题。 您假设传递给onTouch的视图是棋盘上的64个视图之一,但事实并非如此。 传递给onTouch的View是您设置OnTouchListener的View 。 在这种情况下,它就是棋盘本身。

相反,您应该通过使用MotionEvent的坐标来查找单个片段的索引。 该方法应该看起来像这样:

private int mLastChildIndex = -1; public boolean onTouch(View view, MotionEvent event) { int x = (int) event.getRawX(); int y = (int) event.getRawY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mLastChildIndex = getChildIndex((ViewGroup) view, x, y); playNotificationForIndex(mLastChildIndex); break; case MotionEvent.ACTION_MOVE: int currentIndex = getChildIndex((ViewGroup) view, x, y); if (currentIndex != mLastChildIndex) { playNotificationForIndex(currentIndex); mLastChildIndex = currentIndex; } break; case MotionEvent.ACTION_UP: performClickForIndex(mLastChildIndex); mLastChildIndex = -1; break; } return true; // This method eats all MotionEvent actions for the View } private int getChildIndex(ViewGroup viewGroup, int x, int y) { for (int i = 0; i < viewGroup.getChildCount(); i++) { View child = viewGroup.getChildAt(i); int[] coordinates = new int[2]; child.getLocationOnScreen(coordinates); Rect bounds = new Rect(coordinates[0], coordinates[1], coordinates[0] + child.getWidth(), coordinates[1] + child.getHeight()); if (bounds.contains(x, y)) { return i; } } return -1; }

I think I understand the issue correctly. You are assuming that the View passed to onTouch is one of the 64 views on the chessboard, but this is not the case. The View passed to onTouch is the View that you set the OnTouchListener on. Which, in this case, is the chessboard itself.

Instead, you should be finding the index of the individual piece by using the coordinates of the MotionEvent. The method should look something like this:

private int mLastChildIndex = -1; public boolean onTouch(View view, MotionEvent event) { int x = (int) event.getRawX(); int y = (int) event.getRawY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mLastChildIndex = getChildIndex((ViewGroup) view, x, y); playNotificationForIndex(mLastChildIndex); break; case MotionEvent.ACTION_MOVE: int currentIndex = getChildIndex((ViewGroup) view, x, y); if (currentIndex != mLastChildIndex) { playNotificationForIndex(currentIndex); mLastChildIndex = currentIndex; } break; case MotionEvent.ACTION_UP: performClickForIndex(mLastChildIndex); mLastChildIndex = -1; break; } return true; // This method eats all MotionEvent actions for the View } private int getChildIndex(ViewGroup viewGroup, int x, int y) { for (int i = 0; i < viewGroup.getChildCount(); i++) { View child = viewGroup.getChildAt(i); int[] coordinates = new int[2]; child.getLocationOnScreen(coordinates); Rect bounds = new Rect(coordinates[0], coordinates[1], coordinates[0] + child.getWidth(), coordinates[1] + child.getHeight()); if (bounds.contains(x, y)) { return i; } } return -1; }

更多推荐

本文发布于:2023-08-04 10:15:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1415287.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OnTouch   ACTION

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!