検索
記事内検索

Androidアプリ「ストップウォッチ」作成(Kotlin)後半

前半はこちら

1.はじめに 今回はKotlinで簡易的なストップウォッチを作成していきます。 少しでも参考になれば嬉しいです。 作成はAnd...

4.内部処理設定

前半はレイアウトを設定してきました。

レイアウトの設定だけではボタンを押したり、計測ができないため、後半では内部処理の設定をしていきましょう。

内部処理では「MainActivity.kt」のファイルに記述していきます。

最初は以下のようになっていると思います。

ここに追記していきましょう。

package ** //(環境によってここは変わってきます)
import android.support.v7.app.AppCompatActivity
import android.os.Bundleclass MainActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
 }
}

4.1.表示関数を作ろう

まずは、表示関数を作成しましょう。

ここでは表示関数をTextViewとします。
TextViewが呼び出されたときに、計測時間を変更できるようにしましょう。

コードは下記になります。

private fun TextView(time: Int = 0): String? {
 return if (time < 0) {
  null
 } else if (time == 0) {
  ”00:00:00″
 } else {
  val h = time / 3600
  val m = time % 3600 / 60
  val s = time % 60
  ”%1$02d:%2$02d:%3$02d”.format(h, m, s)
 }
}

timeは後ほど説明いたします。

表示関数が呼び出されたときtimeが0未満の場合null(値無し)、0であれば”00:00:00″、それ以外であれば計測時間で返します。また、int型のため整数で返します。
※%は余りを示します。

4.2.基本内部処理を作成しましょう

ここからメインの内部処理を行うメインクラスに記述していきます。

まずは、使用する変数を指定しましょう。

val handler = Handler()
var timeValue = 0
var Switch_Button = 0

val、varの使い方については下記の過去の記事を参考にしてください。

私はほぼプログラミングがしたことがなく、ここでは私が学んだことを共有していく記事になります。少しでも参考になれば嬉しいです。 今回はK...

Handlerインスタンスをhandler、時間計測をする変数をtimeValue、複数回クリックしたときの誤動作を防ぐための変数をSwitch_Buttonとします。

次にボタン設定をしていきます。

val timeText = findViewById(R.id.timeText) as TextView
val startButton = findViewById(R.id.start) as Button
val stopButton = findViewById(R.id.stop) as Button
val resetButton = findViewById(R.id.reset) as Button

上記でキャストしております。

findViewById(R.id.timeText)では、画面上のパーツの「timeText」を一時的にキャスト(型変換)を行っています。この戻り値はView型になります。

val runnable = object : Runnable {
 override fun run() {
  timeValue ++
  TextView(timeValue)?.let {
   timeText.text = TextView(timeValue)
  }
  handler.postDelayed(this, 1000)
 }
}

定期動作することができるRunnableを使うことで、Handlerで簡単に通知することができます。

handler.postDelayed(this, 1000)を用いることで、1,000ミリ秒(=1秒)ごとに実行されます。

TextView(timeValue)?.let {では、TextView(timeValue)がnullではない時は、let{}を実行しないようにしております。

timeText.text = TextView(timeValue)では受け取った値を表示関数(TextView)を呼び出し、受け取った値をtimeText.textに与えています。

letの場合は変数を省略できる(自動で変数itにあたえる)ため、下記のように表すことも可能です。

TextView(timeValue)?.let {
 TextView(timeValue)
 timeText.text = it
}


残りはボタンを押されたときの動作処理設定をすれば完了です。

startButton.setOnClickListener {
 if(Switch_Button<1) handler.post(runnable)
 Switch_Button = 1
 }

stopButton.setOnClickListener {
 Switch_Button = 0
 handler.removeCallbacks(runnable)
}

resetButton.setOnClickListener {
 Switch_Button = 0
 handler.removeCallbacks(runnable)
 timeValue = 0
 TextView()?.let {
  timeText.text = it
 }
}

startButton.setOnClickListenerはstartボタンがクリックされたときに中身が動作します。

クリックされた際にhandlerによりrunnableを実行させます。

また、実行されたときにSwitch_Buttonに1を与えます。この処理をすることにより、複数回クリックされた場合に同時にrunnableを実行することを防ぐことができます。

stopButton.setOnClickListener では、再度startの動作を出来るようにするため、Switch_Buttonに0を与え、handler.removeCallbacks(runnable)によりrunnableの動作を停止させます。

resetButton.setOnClickListenerでは、stopButton.setOnClickListenerの動きに加え、初期値に戻すために、timeValueに0を与え、表示関数の呼び出しを行っています。

最後に使用メソッドクラスを実行できるようにimportを追記すれば、アンドロイドアプリのストップウォッチの完成です。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.widget.Button
import android.widget.TextView

5.さいごに

まだ作っていない方は是非挑戦してみてください。

こんな方法もあるよーなどございましたらコメント頂けますと幸いです。

最後まで読んで頂きありがとうございました。

お問い合わせ

副収入サイト

暮らしをおトクにかえていく|ポイントインカム モッピー!お金がたまるポイントサイト アンケートモニター登録

シェアする

  • このエントリーをはてなブックマークに追加

フォローする