日の終わりに今日のまとめ

開発や仕事で使った技術をまとめてます。

[android]Timer、TimerTask処理を使って画面の描画処理[java]

画面の描画などで、時間の経過によって画面を変化させたいときにはjava.util.Timerが使えます。

TimerTaskクラスをTimerスケジュールに設定することで定期的に処理を実行することができます。

 

MainActivity.java 

package com.example.test;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class MainActivity extends Activity {

	Handler m_handler = null;
	TextView m_timerCount = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		m_handler = new Handler();
		setContentView(R.layout.activity_main);
		m_timerCount = (TextView) findViewById(R.id.timerCount);

		Timer timer = new Timer();
		TimerTask timerTask = new myTimerTask();
		timer.schedule(timerTask, 0); // 即座にタイマー処理を実行する
	}

	class myTimerTask extends TimerTask {

		int timerCnt = 0;

		@Override
		public void run() {
			while (true) {
				timerCnt++;
				// Viewの操作には更に別スレッドで実行させる
				m_handler.post(new Runnable() {
					@Override
					public void run() {
						m_timerCount.setText(String.valueOf(timerCnt)); // TextViewにカウントの表示
					}
				});
			}
		}
	}

}

 

 

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/timerCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>