プロフィール

Epic's Garden

Author:Epic's Garden
初心者による、初心者のための解説ブログ。
現在、アプリ公開中!
サークル「Epic's Garden」として活動してます。

カテゴリ

最新記事

最新コメント

月別アーカイブ

アクセスカウンター

ブログランキング

にほんブログ村 IT技術ブログへ

twitter

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

アプリ・ゲーム開発らぼ(旧Androidアプリ開発らぼ)
様々なプラットフォーム向けのアプリ開発らぼです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タイマーの一時停止
開始、終了ボタン付きタイマーの作成の続きです。
今回はタイマーに一時停止ボタンを設置する方法を説明します。
この一時停止ボタンの設置が意外と面倒です。

以下のようにプロジェクトを変更してください。

MainActivity.java


package com.epicsgarden.countdowntimer;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    public MyCountDownTimer cdt;
    public TextView time;
    public Button btn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        time=(TextView)findViewById(R.id.time);
        btn3=(Button)findViewById(R.id.stop);
        cdt = new MyCountDownTimer(30*1000, 100);
        cdt.start();
        setTButton(); //・・・【1】

        Button btn1 = (Button)findViewById(R.id.start);
        btn1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                cdt.cancel();
                cdt = new MyCountDownTimer(30*1000, 100);
                cdt.start();
                setTButton(); //・・・【2】
            }
        });

        Button btn2 = (Button)findViewById(R.id.finish);
        btn2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                cdt.cancel();
                time.setText("カウントダウン終了");
                stopButton(); //・・・【3】
            }
        });

    }

    public class MyCountDownTimer extends CountDownTimer{

        public MyCountDownTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onFinish() {
            time.setText("カウントダウン終了");
            stopButton(); //・・・【4】
        }

        @Override
        public void onTick(long millisUntilFinished) {
            if(millisUntilFinished/1000%60>=10){
                time.setText(Long.toString(millisUntilFinished/1000/60) + ":" + Long.toString(millisUntilFinished/1000%60));
            }else{
                time.setText(Long.toString(millisUntilFinished/1000/60) + ":0" + Long.toString(millisUntilFinished/1000%60));
            }
        }
    }

    private void setTButton(){ //・・・【5】
        btn3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                btn3.setText("再開");
                cdt.cancel();
                setSButton();
            }
        });
    }

    private void setSButton(){ //・・・【6】
        btn3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                btn3.setText("一時停止");
                String time1 = time.getText().toString();
                String[] time2 = time1.split(":", 0);
                setTButton();
                cdt = new MyCountDownTimer((Integer.parseInt(time2[0])*60+Integer.parseInt(time2[1]))*1000, 100);
                cdt.start();
            }
        });
    }

    private void stopButton(){ //・・・【7】
        btn3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

            }
        });
    }

}


activity_main.xml


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

    <TextView
        android:id="@+id/time"
        android:textSize="30sp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/start"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="150"
            android:text="@string/s" />

        <Button
            android:id="@+id/finish"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="150"
            android:text="@string/f" />
    </LinearLayout>

    <Button
        android:id="@+id/stop"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/st" />

</RelativeLayout>


string.xml



<resources>

    <string name="app_name">CountDownTimer</string>
    <string name="action_settings">Settings</string>
    <string name="s">Start</string>
    <string name="f">Finish</string>
    <string name="st">Stop</string>

</resources>


まず一時停止ボタンを設置するために【5】setTButton()【6】setSButton()【7】stopButton()という3つの関数を作ります。
【5】setTButton()が呼ばれると、btn3(idがstopのボタン)が押された時の行動が、btn3の文字を「再開」に変えcdtを終了してsetSButton()を呼ぶ、というものになります。
次に【6】setSButton()が呼ばれると、btn3が押された時の行動が、btn3の文字を「一時停止」に変え、中断されていたcdtを再開してsetTButton()を呼ぶ、というものになります。
そして【7】stopButton()が呼ばれると、btn3が押された時に何も起こらなくなります。

まずこのプロジェクトを起動した時は【1】のsetTButton()が呼ばれ、btn3を押すとタイマーを一時停止できるようになっています。
【3】Finishボタンを押した時と【4】カウントダウン終了時にはstopButton()を呼ぶようにしています。
ここでstopButton()を呼ばないと、カウントダウンが終了しているのに一時停止や再開ボタンを押すことができてしまい、エラーになります。
【2】Startボタンを押した時にはsetTButton()を呼ぶようになっています。このボタンを押せばカウントダウン中でも終了後でもタイムを初期状態にして、btn3でタイマーを一時停止できるようにします。

実際にこのプロジェクトを作成して、全てのボタンが上手く動作しているか試してみましょう。

CountDownTimer05.jpg

CountDownTimer06.jpg
スポンサーサイト
コメント

コメントの投稿














管理者にだけ表示を許可する


トラックバック
トラックバック URL
http://yumenomaterial.blog.fc2.com/tb.php/75-a822b02f
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。