2016-10-14 8 views
0

Currentlly、私はパターンロックアプリケーションを開発しています。私のアプリケーションでユーザーが間違ったパターンを入力したときにパターンロックアクティビティの遅延が30秒遅れました。 "Please Wait 30だから、そのテキスト "30秒待ってください"を置き去りにされたカウンターに置き換えたいと思います。テキストビューでデクリメントカウンタを設定するには?

例: 30-29-28-27 ----- 0(自動的decreamentカウンタ値)ここで

この私のTextViewのXML

<TextView 
    android:id="@+id/txtMessage" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Please Wait 30 Seconds" 
    android:gravity="center" 
    android:textSize="25dp" 
    android:textColor="@color/colorAccent" 
    android:visibility="gone"/> 

私が欲しいandroid:text="Please Wait 30 Seconds"を参照してください。デクリメントカウンタを設定する

このアクティビティコード

private void invalidPattern() { 

    failedCount ++; 

    if (failedCount > LIMIT) { 

     lock9View.setVisibility(View.GONE); 
     txtMessage.setVisibility(View.VISIBLE); 
     Animation zoomOutAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.animation); 
     txtMessage.startAnimation(zoomOutAnimation); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       //reset the failed count 
       failedCount = 0; 
       lock9View.setVisibility(View.VISIBLE); 
       txtMessage.setVisibility(View.GONE); 
       //Enable the input interface here 
      } 
     }, 30000); // 30Sec delay 
    } 
    else 
    { 
     Log.i("Wrong....", "aa..else.....invalidPattern()"); 
    } 
} 

だから誰でも知っていると分かります。

+0

'android:text =" Please Wait "+ failedCoun t + "Seconds" ' – Piyush

+0

これは決してうまくいかないでしょう。

+0

@Piyushこれはint LIMIT = 5のような限界を表示することができます。私は間違ったパターン5時間を作成しています。ユーザーが間違ったパターンを5回入力すると自動的に値を落としたいと思っています....より良い理解のために私の質問を参照してください –

答えて

2

あなたの要件の良いアプローチはCountDownTimerです。以下のコードは、それはあなたが

XMLレイアウトファイルを使用する方法を示していますJAVAファイル内

<TextView 
     android:id="@+id/txtMessage" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="Please Wait 30 Seconds" 
     android:gravity="center" 
     android:textSize="25dp" 
     android:textColor="@color/colorAccent" 
     android:visibility="visible"/> 

他の回答に加えて

private TextView countDownTv; 

    CountDownTimer mCountDownTimer = new CountDownTimer(30 * 1000, 1000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      //this will be called every second. 
      countDownTv.setText("Please Wait " + (millisUntilFinished/1000) + " seconds."); 
     } 

     @Override 
     public void onFinish() { 
      //you are good to go. 
      //30 seconds passed. 
     } 
    }; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     //...... 
     countDownTv = (TextView) findViewById(R.id.txtMessage); 

     //To start the timer... 
     mCountDownTimer.start() 
    } 
+0

Thxx ....それは働いています... –

0

使用CountDownTimer

private class StoryCountDown extends CountDownTimer { 

    public StoryCountDown(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    @Override 
    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
} 

そして、以下のようにこのクラスを使用します。

StoryCountDown countDownTimer = new StoryCountDown(30000, 1000); 
countDownTimer.start(); 
0

Thread t = new Thread() { 
     public void run() {    
      for (int i = 30; i > 0; i--) {     
       try { 
        final int a = i; 
        runOnUiThread(new Runnable() { 
         public void run() {       
          txtMessage.setText("Please Wait "+ i +" seconds");        
         }      
        }); 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    t.start(); 
関連する問題