10から0までカウントダウンしてリアルタイムで表示するために、タイマークラスを使用してtextViewに割り当てる方法があるかどうか疑問に思いました。
私はそれを調べてクロノメーターの機能を見つけましたが、私が理解しているのは、それはカウントアップするだけだということですか?
これを行う方法を学びたいのですが、それを行う方法はありますか?もしそうなら、どのように?私は完全に困惑しています。
10から0までカウントダウンしてリアルタイムで表示するために、タイマークラスを使用してtextViewに割り当てる方法があるかどうか疑問に思いました。
私はそれを調べてクロノメーターの機能を見つけましたが、私が理解しているのは、それはカウントアップするだけだということですか?
これを行う方法を学びたいのですが、それを行う方法はありますか?もしそうなら、どのように?私は完全に困惑しています。
カウントダウンが必要な場合は、android.osパッケージにCountDownTimerという同音異義語クラスがあります。
ここ(http://developer.android.com/reference/android/os/CountDownTimer.html)で、このクラスの正しい使用法を見つけることができます。これはまさにあなたが必要とするものです。
このクラスはAPIレベル1以降に存在するため、互換性の問題に陥ることはありません。
例(ドキュメントから)
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
試してみてくださいCountDownAnimation
。それはまさにあなたが必要とすることをします。プロジェクトにはテストが含まれています。
CountDownTimer
1秒ごとにティックを使用する場合、最後のティックは取得されません。したがって、をCountDownAnimation
使用するものを試してみることをお勧めしますHandler
。
私はGuglielmoMorettiに同意しますが、それでもTextViewを使用してそれを実行したい場合は、従来のObserverデザインパターンを使用して実装するよりも。
以下のコードのようなカスタムテキストビューを作成できます。
package com.example.stackoverflow;
import java.util.Observable;
import java.util.Observer;
import android.content.Context;
import android.widget.TextView;
public class MyTextView extends TextView implements Observer{
public MyTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
this.setText(""+((Integer)data).intValue());
}
}
また、このようなobservalbleでモードを実装します。
package com.example.stackoverflow;
import java.util.Observable;
public class MyTextViewModel extends Observable {
private int counter;
public MyTextViewModel(int initnumber){
this.counter = initnumber;
}
public void decrementCounter(){
if(this.counter>0){
this.counter--;
setChanged();
notifyObservers(this.counter);
}
}
}
このようなテスト活動、
package com.example.stackoverflow;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
LinearLayout ll;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// tv = (TextView) findViewById(R.id.textView1);
ll = (LinearLayout)findViewById(R.id.ll1);
MyTextView mtv = new MyTextView(getApplicationContext());
MyTextViewModel mm = new MyTextViewModel(10);
mm.addObserver(mtv);
mtv.setText("Not yet init");
ll.addView(mtv);
mm.decrementCounter(); // call this function in a thread and as many times as you want
}
}