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

텍스트뷰에 0.001부터 1.000까지 증가하면서 출력시키기

0 추천

0.001부터 1.000까지 숫자를 증가시키변서 하나의 텍스트뷰에 출력시키려고하는데요.

코드는

while(k<1.000)

                        {

                            k+=0.001;

                            sleep(20);

                            DB.setText(String.valueOf(k));

                            

                            

                        }

이렇게 작성했는데 최종결과값만 출력되느데 어떻게 수정해야할까요??

삐삐빠뿌 (710 포인트) 님이 2015년 11월 18일 질문

2개의 답변

+1 추천
 
채택된 답변
setText를 한다고 해서 바로 그려지는 건 아닙니다. 그려지기 전에 계속 setText를 해버리면 최종값만 보여지게 됩니다. ui update하는 작업을 while이나 for문 등으로 처리하는 건 굉장히 좋지 않습니다(원하는 동작이 되지 않을 가능성도 높고, ANR 발생확률도 높죠)

아래처럼 핸들러를 이용해서 쓰레드로 동작시키시면 원하는 동작이 될 겁니다.

    private Handler mHandler = new Handler();
    private float k = 0.0f;
    private void testLoop() {
        new Thread(new Runnable() {
            public void run() {
                while (k < 1f) {
                    k += 0.001;
                    SystemClock.sleep(20L);
                    mHandler.post(new Runnable() {
                        public void run() {
                            tv.setText(String.valueOf(k));
                        }
                    });
                }
            }
        }).start();
    }
cc1232 (35,280 포인트) 님이 2015년 11월 18일 답변
삐삐빠뿌님이 2015년 11월 19일 채택됨
코드감사합니다!!
실행을 잘되는데요 값올리기를 멈추려고한다면 그런데 버튼을 한번도 눌름으로써 쓰레드를 중지하려면어떤식으로코드를짜는게좋을까요???
별도로 boolean형 변수를 하나 만드시는 게 편할 듯 합니다
예를 들자면,
private boolean enableThread = true;
이런 식으로 선언했다가 멈추고자 할 때, 저 변수를 false 바꾸시고
저 위의 run()메소드 내의 while문의 조건을 while((k < 1f) && enableThread)
이런 식으로 변경하면 될 겁니다.
0 추천
DB.setText(String.valueOf(k));

DB.append(String.valueOf(k) + "\n");

으로 바꾸세요 

 

근데 중간에 0.02초는 왜 쉬는 건가요? 사람이 못 느낄텐데요. 

쎄미 (162,410 포인트) 님이 2015년 11월 18일 답변
0.001 부터 1.000까지 증가시키면서 줄바꿈하면서 출력하려는게 아니고 하나의 텍스트뷰에서 계속 돌아가려고 구현했는데 최종값만 계속 출력되 이것저것 해본겁니다... 답변감사드립니다!
...