8

10から0までカウントダウンしてリアルタイムで表示するために、タイマークラスを使用してtextViewに割り当てる方法があるかどうか疑問に思いました。

私はそれを調べてクロノメーターの機能を見つけましたが、私が理解しているのは、それはカウントアップするだけだということですか?

これを行う方法を学びたいのですが、それを行う方法はありますか?もしそうなら、どのように?私は完全に困惑しています。

4

3 に答える 3

20

カウントダウンが必要な場合は、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();
于 2012-09-26T19:12:44.517 に答える
1

試してみてくださいCountDownAnimation。それはまさにあなたが必要とすることをします。プロジェクトにはテストが含まれています。

CountDownTimer1秒ごとにティックを使用する場合、最後のティックは取得されません。したがって、をCountDownAnimation使用するものを試してみることをお勧めしますHandler

于 2014-02-27T23:23:24.053 に答える
0

私は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
}
}
于 2012-09-26T19:24:28.793 に答える