2011-08-02 3 views
0

한 번 트리거 된 이미지를 표시해야하는 onKeyDown 이벤트가 있지만 해당 키를 여러 번 눌러도 아무 데나 클릭 할 때까지 이미지가 나타나지 않습니다. 내 마우스로 캔버스에. 실제 문제에 대한 제안 및 진행 방법 개념에 꽤 새롭기 때문에 무엇이 빠져 있는지 모릅니다. * 전체 편집 및 붙여 넣기 수업. 감사 Android : onKeyDown이 마우스 클릭 후까지 트리거되지 않음

public class BuccaneerView extends TileView { 

public static final int PLAYER = 1; 
public static final int GREEN_STAR = 2; 



Coordinate P_Location; 

public BuccaneerView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initBucc(); 
} 

private void initBucc() { 

    this.setFocusable(true); 



    Resources r = this.getContext().getResources(); 

    resetTiles(4); 
    loadTile(PLAYER, r.getDrawable(R.drawable.aerialplayer)); 
    loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar)); 

    /**/ 

    P_Location = new Coordinate(5,5); 
    setTile(PLAYER, P_Location.x, P_Location.y); 

} 


@Override 
    public boolean onKeyDown(int keyCode, KeyEvent msg) { 

    if (keyCode == KeyEvent.KEYCODE_SPACE) 
    { 

     setTile(GREEN_STAR, 1, 0);   
    } 


    return super.onKeyDown(keyCode, msg); 
} 

public void update() 
{ 


} 

} 추측에서

+1

onKeyDown 수신기에 대한 코드를 알려주세요. –

+0

에뮬레이터에서 테스트 중이라는 것을 알고 있습니까? 권리? –

+0

우리에게 보여주세요! – Blundell

답변

0

onKeyDown을 on 메서드 중 하나로 취급하는 것 같습니다.

return super.onKeyDown(keyCode, msg); 

이 기능을 호출하고 어떤 키를 눌렀는지 되돌리고 싶은 것처럼 나쁜 행동입니다. 단순히 거짓을 반환하도록 변경하면 키보드에서 수행중인 작업을 처리하게됩니다.

편집

는 onKeyDown에 사용 onKey되지 ​​않은 이유가 있나요? 여기 내가 사용하는 몇 가지 추가 코드가 (길이 128 pressedKeys) 논리 값의 배열을 사용하고 키가 지금과

public boolean onKey(View v, int keyCode, KeyEvent event) 
{ 
    if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) 
    { 
     if(keyCode > 0 && keyCode < 127) 
      pressedKeys[keyCode] = true; 
    } 

    if (event.getAction() == android.view.KeyEvent.ACTION_UP) 
    { 
     if(keyCode > 0 && keyCode < 127) 
      pressedKeys[keyCode] = false; 
    } 

    keyEventsBuffer.add(keyEvent); 
} 
    return false; 
} 

을 누르면 나중에 확인하기 위해 배열을 확인하는 데 사용할 수있다 이 말을 할 수 있습니다.

If(pressedKeys[KeyYouWantToCheck]) 
{ 
//Do some stuff if that key is down 
} 
+0

는 제안 된대로 false를 반환합니다. 녹색 별은 마우스로 캔버스를 클릭하기 전까지는 표시되지 않습니다. –

+0

잘하면 내 도움이 보입니다 – Chris

+0

어딘가에 onKeyListener를 배치해야합니까? onKeyDown에서 onKey로 변경되었습니다. 성공하지 못했습니다. –

0

는 키 이벤트는 키 리스너에 설정 한대로 전달되지 않습니다. 그 사이에 청취자와 키 이벤트의 전파를 정지시키는 (즉,이 메소드로부터 true를 돌려주는) 다른 뷰가있는 경우에 발생합니다. 기본적으로이 작업을 수행하는보기가 있습니다 (예 : 대부분의 키에 대해 EditText). 질문을 편집하고 더 많은 코드를 포함하거나 활동 설정 방법을 설명하면 도움이됩니다.

캔버스를 클릭하면 초점이 바뀌고 키 이벤트가 다른보기로 전달됩니다. 이것은 왜 클릭 후 핵심 수신기가 갑자기 작동 하는지를 설명 할 수 있습니다.

관련 문제