0

Android画面に定期的に白い長方形を表示したいと思います。または背景色を変更します。たとえば、500 ミリ秒ごとに画面の色を黒から白に変更し、約 200 ミリ秒かけてから黒に戻します。

これを行う最善の方法は何ですか?asynctask を試してみましたが、元のスレッドのみがビューにアクセスできるというエラーが発生しました。定期的なトーンを鳴らし、正常に動作する同様の asynctask があります。

解決:

レスポンダーの助けを借りて、黒用と白用の 2 つのタイマーを作成することで問題を解決しました。黒い画面は、白い画面を表示したい時間だけ遅れて始まります。どちらも同じ実行率であるため、白い画面が表示され、ms の期間が経過すると黒い画面が表示されます。たとえば、画面は黒く、200 ミリ秒間毎秒白く点滅します。

    @Override
protected void onResume() {
    super.onResume();

    mBlackTimer = new Timer();
    mBlackTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    view.setBackgroundColor(Color.parseColor("#000000"));

                }
            });
        }
    }, duration, (long) (1000 / visionPeriod));

    mWhiteTimer = new Timer();
    mWhiteTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    view.setBackgroundColor(Color.parseColor("#ffffff"));
                }
            });

        }
    }, 0, (long) (1000 / visionPeriod));
}
4

3 に答える 3

3

これにタイマークラスを使用して、繰り返される間隔でいくつかのタスクを実行できます。

//Declare the timer
Timer t = new Timer();

//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        //Called each time when 1000 milliseconds (1 second) (the period parameter)
    }    
},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);
于 2014-01-06T12:54:28.573 に答える
0

AsyncTask は主に、リモート サーバーからデータをダウンロードするなどのバックグラウンド スレッド アクティビティを実行するために使用されます。独自のスレッドで実行されるため、 AsyncTask から Activity の View にアクセスしようとすると、その Error が返されますthat only the original thread can touch the View

反復的なタスクには、Timer クラスまたは AlarmManager クラスを使用できます。私の以前の回答にアクセスしてください。

于 2014-01-06T12:41:57.907 に答える