2013-03-12 2 views
0

누군가 내게 설명 할 수 있습니다. 어떻게 OnLongClickListener에서 올바르게 진동하는지 설명 할 수 있습니다. 아래의 방법에서 진동은 매우 짧습니다. return false; 진동을 예상대로 5000ms 동안 지속하면 BUT OnClickListener이 (가) 발생합니다.OnLongClickListener에서 진동

화재가 아닌 전체 기간 동안 OnLongClickListener에서 어떻게 진동해야합니까? OnClickListener?

final Vibrator x = (Vibrator) getParent() 
      .getSystemService(Context.VIBRATOR_SERVICE); 
button.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
    public boolean onLongClick(View v) { 
     x.vibrate(5000); 
     return true; 
    } 
}); 
당신은 진동의 기간 동안 실행 타이머를 설정하고,이 시간이 초과되었습니다 만되면 True를 반환 할 수

답변

0

클릭 이벤트가 트리거되면 사용 가능한 가장 낮은 핸들러로 전달됩니다 (누군가 중단되지 않은 경우 제외). 귀하의 경우 긴 클릭 이벤트가 먼저 OnLongClickListener으로 전달됩니다. 해당 리스너가 true을 반환하면 기본적으로이 클릭 이벤트가 처리되었음을 알립니다. false을 반환하면 click 이벤트가 처리되지 않았다는 사실을 알리기 때문에 이벤트가 계층 구조의 상위 핸들러 인 경우 OnClickListener으로 전달됩니다.

그렇기 때문에 긴 클릭 이벤트를 처리해야하기 때문에 false을 반환하는 것이 좋습니다.

진동 자체에 대해 배경 스레드 또는 ASyncTask을 생성하는 것은 어떻습니까? 마찬가지로 뭔가 :

@Override 
public boolean onLongClick(View v) { 
    getHandler().post(new Runnable() { 

     @Override 
     public void run() { 
      x.vibrate(5000);   
     } 

    }); 
    return true; 
} 

나는 코드를 테스트하지 않았지만 그것을 잘해야합니다.

0

. 조금 어색하지만 작동해야합니다.