download
download
download
download
download
import com.badlogic.androidgames.framework.Input.KeyEvent;
import com.badlogic.androidgames.framework.Pool;
import com.badlogic.androidgames.framework.Pool.PoolObjectFactory;
public class KeyboardHandler implements OnKeyListener{ //키보드 리스너 상속
boolean[] pressedKeys = new boolean[28];
Pool<KeyEvent> keyEventPool;
List<KeyEvent> keyEventsBuffer = new ArrayList<KeyEvent>();
List<KeyEvent> keyEvents = new ArrayList<KeyEvent>();
public KeyboardHandler(View view){
PoolObjectFactory<KeyEvent> factory = new PoolObjectFactory<KeyEvent>(){ Pool
@Override
public KeyEvent createObject() {
return new KeyEvent();
}
};
keyEventPool = new Pool<KeyEvent>(factory, 100); // 키 입력을 Pool을 사용하여 100개의 object만 생성되도록 Garbage Collector 작동
view.setOnKeyListener(this);
view.setFocusableInTouchMode(true); //터치모드 중에도 키보드 모드 사용 가능하게 설정(다중모드 지원)
view.requestFocus(); //뷰에 포커스 적용
}
@Override
public boolean onKey(View v, int keyCode, android.view.KeyEvent event) {
if(event.getAction() == android.view.KeyEvent.ACTION_MULTIPLE) return false; // 같은키를 여러번 눌렀다면 리턴
synchronized(this){
KeyEvent keyEvent = keyEventPool.newObject(); //KeyEvent Input 객체 생성
keyEvent.keyCode = keyCode;
keyEvent.keyChar = (char)event.getUnicodeChar();
if(event.getAction()== android.view.KeyEvent.ACTION_DOWN){
keyEvent.type = KeyEvent.KEY_DOWN; //type은 키가 눌림으로 설정
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = true; // 눌려진 KeyCode Array에 눌렸다는 true 표시
}
if(event.getAction()==android.view.KeyEvent.ACTION_UP){
keyEvent.type = KeyEvent.KEY_UP;
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = false;
}
keyEventsBuffer.add(keyEvent);
}
return false;
}
public boolean isKeyPressed(int keyCode){ // 눌려진 키 상태를 리턴
if(keyCode < 0 || keyCode > 127)
return false;
return pressedKeys[keyCode];
}
public List<KeyEvent> getKeyEvents(){
synchronized(this){
int len = keyEvents.size();
for(int i=0; i < len; i++)
keyEventPool.free(keyEvents.get(i));
keyEvents.clear();
keyEvents.addAll(keyEventsBuffer);
keyEventsBuffer.clear();
return keyEvents;
}
}
}