2014-11-03 5 views
0

사용자가 tts가있는 버튼을 한 번 클릭하면 몇 초 후에 단계별로 단추 또는 텍스트보기를 표시하려고합니다. 예 :일정 기간 후에 단계별로 텍스트보기를 표시합니다.

A ----- AB ----- ABC ---> 이미지 .. a -----> ab -----> abc ---> 이미지 ..

모든 다른 텍스트보기가 4 텍스트보기를 의미

나는 그것이 적합한 솔루션이다 보이지 않는 모든 요소가 보여 TUN 시간 동안 볼 수 설정할 그러나 예상대로 작동하지 않는, 심지어 해달라고 생각이 .

public void playRow1(View v) { 
    mytexts = (Button)findViewById(R.id.btn3Img); 

     handler.postDelayed(new Runnable(){ 
      @Override 
      public void run() { 
       for(int i=0; i < 3; i++){ 
        if(i == 0){ 
         Button btn1 = (Button) findViewById(R.id.btn3Img); 
         Button btn2 = (Button) findViewById(R.id.btn3Img2); 
         Button btn3 = (Button) findViewById(R.id.Button01); 


         ImageView btnImg1 = (ImageView) findViewById(R.id.imgObjRow1); 
         ImageView btnImg2 = (ImageView) findViewById(R.id.imgPlayNextRow1); 

         btn1.setVisibility(View.VISIBLE); 
         btn2.setVisibility(View.VISIBLE); 
         btnImg1.setVisibility(View.VISIBLE); 
         btn3.setVisibility(View.VISIBLE); 

         tts.speak("a ", TextToSpeech.QUEUE_FLUSH, null); 
         btnImg2.setVisibility(View.INVISIBLE); 
         try{ 
         Thread.sleep(3000); 
         }catch(Exception e){ 

         } 

      } 
     }, 2000 * (count + 1)); 
    } 

나는 실행 방법은 루프에 있어야한다고 생각하지만 .... 사전에 .. 단계에서 텍스트를 표시하기위한

덕분에 몇 가지 솔루션을 제공하기 위해 도와주세요 작동하지 않는. itin

+0

ContDownTimer를 사용해 보시고 문자를 하나씩 추가해보십시오. –

+0

실제로 다른 위치에 이미지가있는 다른 텍스트보기가 있습니다 .... 어떤 아이디어를 가지고 있니? 배열 또는 무언가 – itin

+0

먼저 Thread.sleep (3000)을 사용하지 마십시오. 둘째, 단일뿐만 아니라 모든 setVisibility에 핸들러를 사용하려고합니다. – Chitrang

답변

1

방금 ​​테스트 한 (단일 TextView) 솔루션은 잘 작동합니다.

TextView txt = (TextView) findViewById(R.id.txtTitle); 
    final String str = "Some Text"; 

    final int secs = str.length(); 
    new CountDownTimer((secs + 1) * 1000, 1000) // Tick length: 1 second 
    { 
     int sec = 0; 

     @Override 
     public final void onTick(final long millisUntilFinished) 
     { 
      txt.setText(txt.getText().toString() + str.charAt(sec)); 
      sec += 1; 
     } 
     @Override 
     public void onFinish() 
     { 
      // TODO Auto-generated method stub 
     } 
    }.start(); 

이 코드는 (당신의에서 onCreate() 메소드에서) 당신 된 setContentView 후 이동 및 텍스트 뷰를 가진 레이아웃이 txtTitle라고 가정
그것은 다음과 같습니다.

마찬가지로 다른 TextView로도 작업 할 수 있습니다.

[UPDATE]

이 동일한 기능을 수행하지만, 2 TextViews으로하는 방법이다. 첫 번째 이후 두 번째 시작 "입력"이 완료 :

final TextView txt = (TextView) findViewById(R.id.txtTitle); 
    final TextView txt2 = (TextView) findViewById(R.id.txtTitle2); 

    final String str = "Some Text"; 
    final String str2 = "Another Text"; 

    //init(); 

    final int secs = str.length(); 
    new CountDownTimer((secs + 1) * 1000, 1000) 
    { 
     int sec = 0; 

     @Override 
     public final void onTick(final long millisUntilFinished) 
     { 
      txt.setText(txt.getText().toString() + str.charAt(sec)); 
      sec += 1; 
     } 
     @Override 
     public void onFinish() 
     { 
      final int secs = str2.length(); 
      // Start the second CountDownTimer 
      new CountDownTimer((secs + 1) * 1000, 1000) 
      { 
       int sec = 0; 

       @Override 
       public final void onTick(final long millisUntilFinished) 
       { 
        txt2.setText(txt2.getText().toString() + str2.charAt(sec)); 
        sec += 1; 
       } 
       @Override 
       public void onFinish() 
       { 
        // TODO Auto-generated method stub 
       } 
      }.start(); 
     } 
    }.start(); 

은 쉽게 바로 이전의 onFinish() 방법의 다음 CountDownTimer을 시작, 당신이 원하는만큼 TextViews로 개념을 확장 할 수 있습니다.

+0

고마워,하지만이 방법은 긴 체인 것입니다. 이것이 우리가해야 할 유일한 방법입니까 아니면 다른 방법이있을 수 있습니까? – itin

+0

CountDownTimers에서 1 초 대신 1/10 초 (즉, 1000을 100으로 대체)를 사용하면 10 배 빠르게 실행할 수 있습니다. 문자열 길이가 다를 수 있기 때문에 하나의 CountDownTimer에서 프로세스를 병렬화한다고 말하지는 않습니다. 따라서 문자열에 존재하지 않는 문자를 가져 오려고하면 충돌이 발생합니다. 또는 짧은 문자열의 오른쪽에 공백을 추가하여 가장 긴 문자열과 동일한 크기로 만들 수 있습니다. –

+0

당신이 언급 한 2 (str, str2) 대신 9 개의 문자열을 가진다면 코드에 따라 내 의견을 오해 한 것 같아요. onFinish에서 9 번 계층 코드를 작성해야합니까? – itin

관련 문제