这个是我参考别人的帖子,写得一个键值缓冲类,希望对你有所帮助
public class KeyPool {
//for key
private int mFrameKey;
private int mFramePressedKey;
private int mFrameReleaseKey;
private Canvas mCanvas;
//key mode: game_mode or input_mode
private boolean mIsGameMode;
//define final key vlaue
public static final int gk_UNDEFIND = 0;
public static final int gk_UP = 1;
public static final int gk_DOWN = 1 << 1;
public static final int gk_LEFT = 1 << 2;
public static final int gk_RIGHT = 1 << 3;
public static final int gk_FIRE = 1 << 4;
public static final int gk_GAME_A = 1 << 5;
public static final int gk_GAME_B = 1 << 6;
public static final int gk_GAME_C = 1 << 7;
public static final int gk_GAME_D = 1 << 8;
public static final int gk_POUND = 1 << 9;
public static final int gk_STAR = 1 << 10;
public static final int gk_NUM0 = 1 << 11;
public static final int gk_NUM1 = 1 << 12;
public static final int gk_NUM2 = 1 << 13;
public static final int gk_NUM3 = 1 << 14;
public static final int gk_NUM4 = 1 << 15;
public static final int gk_NUM5 = 1 << 16;
public static final int gk_NUM6 = 1 << 17;
public static final int gk_NUM7 = 1 << 18;
public static final int gk_NUM8 = 1 << 19;
public static final int gk_NUM9 = 1 << 20;
/**
* check key be released
*
* @param gameKey
* @return
*/
public boolean keyUp(int gameKey) {
return ((mFrameReleaseKey & gameKey) != 0);
}
/**
* get key value
*
* @param keyCode
* @return
*/
public int getKeyValue(int keyCode) {
int ret = gk_UNDEFIND;
int gameAction = 0;
if(mIsGameMode){
try {
gameAction = mCanvas.getGameAction(keyCode);
} catch (Exception e) {
return ret;
}
}else{
gameAction = keyCode;
}
switch (gameAction) {
case Canvas.UP:
ret = gk_UP;
break;
case Canvas.LEFT:
ret = gk_LEFT;
break;
case Canvas.RIGHT:
ret = gk_RIGHT;
break;
case Canvas.DOWN:
ret = gk_DOWN;
break;
case Canvas.FIRE:
ret = gk_FIRE;
break;
case Canvas.GAME_A:
ret = gk_GAME_A;
break;
case Canvas.GAME_B:
ret = gk_GAME_B;
break;
case Canvas.GAME_C:
ret = gk_GAME_C;
break;
case Canvas.GAME_D:
ret = gk_GAME_D;
break;
case Canvas.KEY_POUND:
ret = gk_POUND;
break;
case Canvas.KEY_STAR:
ret = gk_STAR;
break;
case Canvas.KEY_NUM0:
ret = gk_NUM0;
break;
case Canvas.KEY_NUM1:
ret = gk_NUM1;
break;
case Canvas.KEY_NUM2:
ret = gk_NUM2;
break;
case Canvas.KEY_NUM3:
ret = gk_NUM3;
break;
case Canvas.KEY_NUM4:
ret = gk_NUM4;
break;
case Canvas.KEY_NUM5:
ret = gk_NUM5;
break;
case Canvas.KEY_NUM6:
ret = gk_NUM6;
break;
case Canvas.KEY_NUM7:
ret = gk_NUM7;
break;
case Canvas.KEY_NUM8:
ret = gk_NUM8;
break;
case Canvas.KEY_NUM9:
ret = gk_NUM9;
break;
default:
ret = gk_UNDEFIND;
break;
}
return ret;
}
/**
* on key pressed
* @param keyCode
*/
public void onKeyPressed(int keyCode) {
int value = getKeyValue(keyCode);
// set key
mFrameKey |= value;
// set pressedKey
mFramePressedKey = 0;
mFramePressedKey |= value;
//System.out.println("value:"+value+"framePressedKey:"+framePressedKey);
}
/**
* on key released
* @param keyCode
*/
public void onKeyReleased(int keyCode) {
int value = getKeyValue(keyCode);
// reset key
mFrameKey ^= value;
// set releaseKey
mFrameReleaseKey = 0;
mFrameReleaseKey |= value;
}