마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 중복처리하는 법 좀 알려주세요

0 추천
public boolean onTouch(View v, MotionEvent motionEvent) { 
if (motionEvent.getAction() == motionEvent.ACTION_DOWN) {
 
            if (v.getId() == R.id.button_r1 && v.getId() == R.id.button_r2) {
             //버튼 r1과 r2가 동시에 눌렸을때 v매개변수의 id값 호출
 
 
            여기다 두개의 버튼을 처리하는 메소드를 호출작성
            }
}
 
이런식으로 했는데  View 클래스 매개변수를 한개받에 못받아서 그런가
버튼처리가 2개처리가 안되네요
버튼2개가가 동시 터치되었을때의 제어구문을 어떻게 줘야할까요..
 
익명사용자 님이 2014년 12월 15일 질문

1개의 답변

0 추천
버튼 클릭 시간을 기록해서 일정 시간내에 다른 입력이 들어올 경우 중복 클릭으로 인식하는게 어떻까 합니다.
 
long b1ClickTime = 0;
long b2ClickTime = 0;
 
 
if (v.getId() == R.id.button_r1) {
  b1ClickTime = Sytem.currentTimeMillis();
  if(b1ClickTime  < b2ClickTime + 500) // 0.5초 이내 입력 될 경우 
  { 
    // 중복 입력
  }
}
else if (v.getId() == R.id.button_r2) {
  b2ClickTime = Sytem.currentTimeMillis();
  if(b2ClickTime  < b1ClickTime + 500)
  { 
    // 중복 입력
  }
}
 
사악미소 (65,330 포인트) 님이 2014년 12월 15일 답변
감사합니다 당장 시도해보겠습니다
안되네여ㅠ
if(b2ClickTime < b1ClickTime + 500)
이 if문 안으로 진입이 안되네요
b1ClickTime ,  b2ClickTime  값 체크해보세요.. 두변수는 public boolean onTouch 밖에서 선언 하고 0으로 초기화는 이후엔 안해야하는데..   매번 호출 시마다 초기화 시키시는건 아니신지요?
아 지역변수로 줘서 매번 초기화시키고있었네요..
일단 if구문안으로 진입은 성공했는데 null포인트뜨네요..ㅎ
메소드가 제대로 작동안하는거같긴한데 어차피 동시클릭처리가 궁금했으니
해결했습니다 감사합니다.
다만 한가지 궁금한게 이렇게 시간으로 체크하면 한버튼 누르고 0.5초가
지나버리면 체크부분으로 진입안하지않나요?
맞습니다.  0.5초동안 다른버튼이 눌리지 않으면, 동시에 눌렸다고 할 수 없으니 진입 안하는게 정상일듯 한데.. 문제가 있는지요?

button_r1, button_r2가 클릭될 때마다 각 버튼을  클릭한 시간이 변경되니..
어느쪽이든 눌린 이후 0.5초 이내 다른 버튼이 눌리면 무조건 들어간다고 보시면 되며, 0.5 초 이후 다른게 눌리면 안 들어갑니다. 물론 이 시간 간격은 임의로 넣은거니 적당히 튜닝하시는게 좋구요..
리모콘 앱 제작중이라 한버튼을 오래 쭉 누르고있다가 다른버튼을 누를경우도 생기거든요. 답변 감사드립니다.
오래 누를 경우 일정 시간 주기로 onTouch가 계속 호출되니 맨 마지막 onTouch 가 호출된 시간에서 0.5초 이내 다른 버튼이 눌리면 되서 상관없을 겁니다. ^^;
이제 막 앱개발 들어섰는데 인터넷에서 첨으로 친절한 답변받아보니 감동이큽니다
감사합니다^^
...