-코드-
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로 주어서 스레드를 멈추도록 했습니다.
근데 잘되지 않네요 ㅠㅠ
뭐가 문제일까요 .. 고수분들 좀 도와주세요!!