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

(급해요 ㅠㅠ) 버튼을 누르고 있는 동안 숫자 1씩 빠르게 올리는 법

0 추천
-코드-
package com.example.score_ontouch;
 
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends ActionBarActivity {
 
int left_score=0;//점수 값 저장 변수
TextView leftsco;//점수 표출 뷰 선언
 
 
Button lsu;//점수 올리는 버튼 선언
Handler handler;
String Str2;
int count=0;
boolean bool=true;
 
class WorkerThread extends Thread{
 
 
 
//서브스레드 클래스 생성
Handler handlerd;//서브클래스의 핸들러 선언
 
WorkerThread(){//핸들러 생성(생성자랑 비슷)
this.handlerd=handler;//메인스레드의 핸들러의 객체를 handlerd(서브스레드의 핸들러)에 저장해 놓음  //this-해당 메소드가 서브클래스의 메소드임을 지칭 
}
 
 
public void run(){//서브스레드 실행(스레드의 내용)
 
 
while(bool){
handler.sendEmptyMessage(0);
try{
Thread.sleep(1000); //예외 사항으로 1초 동안 프로그램 일시중지 후에 catch문 실행
 
}catch (Exception e){ // InterruptedException e - 메인스레드가 중단되었을시 발생하는 예외 
 
}
 
}
 
}
}
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//main.xml에서 작업한 내용 출력
 
 
leftsco = (TextView)findViewById(R.id.left_sco);//xml에서 작업한 내용을 .java에서 사용하기 위해 선언(left_sco뷰와 .java에서 선언한 leftsco를 연결시켜줌)
 
lsu = (Button)findViewById(R.id.lsu);//버튼 lsu 연결시켜줌
 
//leftsco.setText(""+left_score);//left_score(점수 값)을 leftsco뷰를 통해 출력
 
 
final Handler mHandler;
 
 
/*lsu.setOnClickListener(new OnClickListener() {// lsu버튼을 누를경우 밑에 이벤트 발생
        public void onClick(View v) {         
                    left_score++;  
                    leftsco.setText(""+left_score);                     
        }
           });
*/
 
lsu.setOnTouchListener(new View.OnTouchListener() {
 
 
@Override
public boolean onTouch(View v, MotionEvent event) {
 
 
switch(event.getAction()){
 
case MotionEvent.ACTION_DOWN:
 
        bool=true;
        WorkerThread threadTest = new WorkerThread();
                threadTest.setDaemon(true);
                 threadTest.start();
       
       
case MotionEvent.ACTION_UP:
bool=false;
       
}
 
return false;
}
});
 
handler=new Handler(){
 
public void handleMessage(Message msg){
 
if(msg.what==0){
left_score++;
Str2 = String.format("%02d",left_score);
leftsco.setText(Str2);
}
}
};
 
}
}
 
 
코드를 간략히 말씀드리면
ACTION_DOWN 즉, 누르고 있는 동안 bool값을 true로 하고 스레드를 시작합니다.
 
스레드 함수를 보면 while(bool)로 해서 bool=true 인 동안은 계속 반복하도록 해줬구요
 
ACTION_UP 즉, 버튼을 때었을 경우 bool=false로 주어서 스레드를 멈추도록 했습니다.
 
근데 잘되지 않네요 ㅠㅠ
 
뭐가 문제일까요 .. 고수분들 좀 도와주세요!!
이주훈 (270 포인트) 님이 2014년 8월 27일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...