[1話完結]指示系アプリを作ってみよう。(Threadを使う)

今回、いいネタが思いついたのでカンタンにアプリを作成してみたいと思います。

公開はしないのですが、勉強向きかと思いますのでソースコードも全て公開します。

 

ロングブレス[NAVERまとめ]

 

今回はこのロングブレスを手伝ってくれるアプリがいいかな。と思います。

ロングブレスとは

1.足を交差させ、後ろに90%体重をかける。おしりをしめる。(えくぼをつくる。)
2.3秒鼻から吸い、7秒かけて口から出す。このときに息が聞こえるくらいの強さで吐き出す。
これを6セット。

2つめ
1.両足をそろえ、一度背伸びをし、おしりに力を。
2.お腹に常にへこませるよう力を入れつつ1つめと同様3秒で息を吸い、7秒かけて出す。
これを6セット。

をするとよいらしいです。

一応、著作権とかありそうなので、開発のコードだけ書きますので、各々自分の環境で作ってみてください。

今回はどのようなアプリにするかと言うと、文字で指示を出していくアプリです。

こんな感じ↓

地味ですいません。。

minSDKをandroid2.2-にしてますがそれ以下でも大丈夫かと思います。

テーマを使うとカンタンに、他のアプリと違った見栄えのアプリが作れるので、今回はテーマを使ってみます。(タイトルを消します!)

テーマの利用はマニフェストだけ使えばOKです

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="info.dorodoro.longbress"
 android:versionCode="1"
 android:versionName="1.0" >
 <uses-sdk android:minSdkVersion="8" />
 <application
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name" >
 <activity
 android:label="@string/app_name"
 android:name=".LONGBRESSActivity"
 android:theme="@android:style/Theme.Black.NoTitleBar" >
 <intent-filter >
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 </application>
</manifest>

とandroid:theme=”@android:style/Theme.Black.NoTitleBar”を付け加えます。

アプリをつけたら、ゆっくりしゃべっているように文字が切り替わる仕様にしたいので↓のような事を最初に考えておきます。

[立ち上がって、足を交差させ、後ろに90%体重をかけてください。]
3second
[おしりをしめてください。]
3second
[3秒鼻から吸い、7秒かけて口から出すのを6セットします。]
[
3second
[鼻から息を吸ってください]
7second
[口から出してください。]
]ここを6回。
[足を揃えてください。]
3second
[おしりをしめてください。]
3second
[3秒鼻から吸い、7秒かけて口から出すのを6セットします。]
[
3second
[鼻から息を吸ってください]
7second
[口から出してください。]
]ここを6回。

[お疲れさまです。]
3sec

終了

何秒待って、次の指示出して、何秒待って。と言う繰り返しです。

layoutは文字が中央に浮いているように設定します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:gravity="center"
 android:orientation="vertical" >

 <TextView
 android:id="@+id/tv1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/hello" />

</LinearLayout>

テキストにThreadで順番にテキストをいれていきます。

((TextView)findViewById(R.id.tv1)).setText("LONG BRESS");
try {Thread.sleep(3000);} catch (InterruptedException e) {}
((TextView)findViewById(R.id.tv1)).setText("立ち上がって、足を交差させ、後ろに90%体重をかけてください");

上記は「LONG BRESS」を入れて3秒後に「立ち上がって、足を交差させ、後ろに90%体重をかけてください」と出力をするプログラムです。

ですが、これをonCreateの中に直接書くとonCreate中に3秒時間がかかっているとみなされて、「LONG BRESS」が出力されずに、「立ち上がって、足を交差させ、後ろに90%体重をかけてください」が出力されます!onCreateが終わってから表示がはじまるのが原因です。

これはJAVAがsingleThreadであることに起因するので、別Threadとして実行すれば、問題ないのでHandlerを用意します。

new Thread(new Runnable() {
 public void run() {
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("LONGBRESS");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("立ち上がって、足を交差させ、後ろに90%体重をかけてください");
 }
 });
 }
}).start();

ちょっとモノモノしくなってきましたが、これでほぼ実装は完了です。テキストを表示して、Threadで休んで、テキストを表示してを繰り返していきます。これをonCreateの中にでもいれれば、その通りに動作します。(コードは最後に記載します。)

見た目は地味ですが、うまく活用すれば、いろいろな可能性のあるアプリになりうると思います。

文字に従えば、カンタンダイエットできます。

是非、素敵なアプリを作る参考にしてみてください。

 

コード

package info.dorodoro.longbress;

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

public class LONGBRESSActivity extends Activity {
 /** Called when the activity is first created. */
 Handler _handler = new Handler();

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 
 new Thread(new Runnable() {
 public void run() {
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("LONGBRESS");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("立ち上がって、足を交差させ、後ろに90%体重をかけてください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("おしりをしめてください。");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("3秒鼻から吸い、7秒かけて口から出すのを6セットします。");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("次のプログラムに移ります。");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("足を揃えてください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("おしりをしめてください。");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("3秒鼻から吸い、7秒かけて口から出すのを6セットします。");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("鼻から息を吸ってください");
 }
 });
 try {Thread.sleep(3000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("口から出してください。");
 }
 });
 try {Thread.sleep(7000);} catch (InterruptedException e) {}
 _handler.post(new Runnable() {
 public void run() {
 ((TextView)findViewById(R.id.tv1)).setText("お疲れさまです。以上でプログラムは終了です。");
 }
 });
 }
 }).start();
//_tv.setText("立ち上がって、足を交差させ、後ろに90%体重をかけてください");
 }
}

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑