睡眠導入

Androidアプリ睡眠導入

一覧

 状態:確認中  閲覧数:1,604  投稿日:2018-04-26  更新日:2018-05-19

内容


新規Kotlinプロジェクト作成
レイアウト編集
現在時刻を取得後、if文で条件分岐
for ループ
画面をタップするとカウント
画像を表示
2枚の画像をタップする度に切り替えてアニメーション
音声ファイルを組み込む
スリープから回復してきた時に呼び出される処理を追加
アプリが終了しても値を残す

レイアウト編集

 閲覧数:311 投稿日:2018-04-26 更新日:2018-05-09

activity_main.xml を編集


android:id="@+id/textview1"を追加

▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">

   <TextView
       android:id="@+id/textview1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Hello World!"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>


kotlin-stdlib-jre7 is deprecated. Please use kotlin-stdlib-jdk7 instead

Unresolved reference: textview

解決方法


案A.「MainActivity.kt」に「import kotlinx.android.synthetic.main.activity_main.*」を追加
▼MainActivity.kt
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*


案B.従来の手法で記述
▼MainActivity.kt
        //textview.text = greeting   //追加
       findViewById<TextView>(R.id.textview).text = greeting


案A.「MainActivity.kt」に「import kotlinx.android.synthetic.main.activity_main.*」を追加


▼work/w4c/android0/introducesleep20180426/MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは" //追加
       textview.text = greeting   //追加
       //findViewById<TextView>(R.id.textview).text = greeting
   }
}




案B.従来の手法で記述


▼work/w4c/android0/introducesleep20180426/MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
//import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは" //追加
       //textview.text = greeting   //追加
       findViewById<TextView>(R.id.textview).text = greeting
   }
}




Unresolved reference: textview

現在時刻を取得後、if文で条件分岐

 閲覧数:397 投稿日:2018-05-04 更新日:2018-05-13

コード


▼MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは" //追加
       val trialTime = Date()                         //追加
       val calendar = GregorianCalendar()             //追加
       calendar.time = trialTime                      //追加

       val hour = calendar.get(Calendar.HOUR_OF_DAY)  //追加
       if (hour in 1..11) {                           //追加
           greeting = "おはよう"                       //追加
       } else if (15 < hour) {                        //追加
           greeting = "こんばんは"                     //追加
       }
       textview.text = greeting   //追加
       //findViewById<TextView>(R.id.textview).text = greeting
   }
}


for ループ

 閲覧数:316 投稿日:2018-05-06 更新日:2018-05-13

コード


▼MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"
       val trialTime = Date()                        
       val calendar = GregorianCalendar()            
       calendar.time = trialTime                      

       val hour = calendar.get(Calendar.HOUR_OF_DAY)  
       if (hour in 1..11) {                          
           greeting = "おはよう"                      
       } else if (15 < hour) {                        
           greeting = "こんばんは"                    
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"
       val sheepNum = 10                          //追加
       for (i in 1..sheepNum) {                   //追加
           greeting += "。。。ひつじが" + i + "匹"     //追加
       }                                          //追加


       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting
   }
}


画面をタップするとカウント

 閲覧数:297 投稿日:2018-05-07 更新日:2018-05-13

コード


▼MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
   var sheepCount = 0

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"
       val trialTime = Date()                        
       val calendar = GregorianCalendar()            
       calendar.time = trialTime                      

       val hour = calendar.get(Calendar.HOUR_OF_DAY)  
       if (hour in 1..11) {                          
           greeting = "おはよう"                      
       } else if (15 < hour) {                        
           greeting = "こんばんは"                    
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"

       //val sheepNum = 10                        
       //for (i in 1..sheepNum) {                  
       //    greeting += "。。。ひつじが" + i + "匹"    
       //}                                          

       greeting += "ねむれませんか?"                  //追加

       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting

       rootLayout.setOnClickListener {             //追加
           sheepCount++                            //追加
           val sheepText = "ひつじが$sheepCount 匹"  //追加
           textview.text = sheepText               //追加
       }                                           //追加



   }
}



初めてのAndroidアプリ開発(Kotlin編)

画像を表示

 閲覧数:303 投稿日:2018-05-09 更新日:2018-05-10

コード


▼layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:id="@+id/rootLayout"
   tools:context=".MainActivity">

   <TextView
       android:id="@+id/textview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Hello World!"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

   <ImageView
       android:id="@+id/imageView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/sheep_1" />

</android.support.constraint.ConstraintLayout>



2枚の画像をタップする度に切り替えてアニメーション

 閲覧数:315 投稿日:2018-05-10 更新日:2018-05-13

表示切り替え


sheepCount % 2
・羊を数えた回数を2で割った余りを求めている

0 ->
・余りが0(偶数)の時
・1枚めの羊の絵(sheep_1)をimageView1にセット

else ->
・余りが0以外(奇数)の時
・2枚めの羊の絵(sheep_2)をimageView1にセット

コード


▼MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
   var sheepCount = 0

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"
       val trialTime = Date()                        
       val calendar = GregorianCalendar()            
       calendar.time = trialTime                    

       val hour = calendar.get(Calendar.HOUR_OF_DAY)  
       if (hour in 1..11) {                          
           greeting = "おはよう"                      
       } else if (15 < hour) {                        
           greeting = "こんばんは"                    
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"

       //val sheepNum = 10                          
       //for (i in 1..sheepNum) {                  
       //    greeting += "。。。ひつじが" + i + "匹"    
       //}                                          

       greeting += "ねむれませんか?"                  

       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting

       rootLayout.setOnClickListener {            
           sheepCount++                            
           val sheepText = "ひつじが$sheepCount 匹"  
           textview.text = sheepText              

           when(sheepCount % 2) {
               0 -> imageView1.setImageResource(R.drawable.sheep_1)    // 追加
               else -> imageView1.setImageResource(R.drawable.sheep_2) // 追加
           }


       }                                          



   }
}


音声ファイルを組み込む

 閲覧数:358 投稿日:2018-05-12 更新日:2018-05-15

プロジェクトファイルに音声ファイルを組み込む


rawという名前のフォルダを作成
・res で右クリック ⇒ New ⇒ Android Resource Directory
・開いたダイアログで、Resource Type から raw を選択してrawという名前のフォルダを作成
・この raw の中に音声ファイルをpaste

変数の型の後ろに?を付けて MediaPlayer? としている理由
var mp: MediaPlayer? = null
・?を付けることでnull許容型(nullを代入できる型)として宣言をし、nullを代入するため
・?を付けずにnullを代入しようとすると、Kotlinではエラーになる

音声の再生
・MediaPlayerオブジェクトのstart()メソッドを呼び出すことで音声の再生を開始
・mpの後ろに?を付けてmp?とすることで、mpがnullで無ければmp.start()を実行するという意味になる

▼MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.media.MediaPlayer
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
   var sheepCount = 0
   var mp: MediaPlayer? = null // 追加

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"
       val trialTime = Date()
       val calendar = GregorianCalendar()
       calendar.time = trialTime

       val hour = calendar.get(Calendar.HOUR_OF_DAY)
       if (hour in 1..11) {
           greeting = "おはよう"
       } else if (15 < hour) {
           greeting = "こんばんは"
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"

       //val sheepNum = 10
       //for (i in 1..sheepNum) {
       //    greeting += "。。。ひつじが" + i + "匹"
       //}

       greeting += "ねむれませんか?"

       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting

       mp = MediaPlayer.create(applicationContext, R.raw.sheep_cry1) // 追加


       rootLayout.setOnClickListener {
           sheepCount++
           val sheepText = "ひつじが$sheepCount 匹"
           textview.text = sheepText

           when(sheepCount % 2) {
               0 -> {                                              // 追加
                   imageView1.setImageResource(R.drawable.sheep_1) // 追加
                   mp?.start()                                     // 追加
               }
               else -> imageView1.setImageResource(R.drawable.sheep_2)
           }


       }



   }
}





初めてのAndroidアプリ開発(Kotlin編)

スリープから回復してきた時に呼び出される処理を追加

 閲覧数:296 投稿日:2018-05-15 更新日:2018-05-19

コード


▼/MainActivity.kt
package work.w4c.android0.introducesleep20180426

import android.media.MediaPlayer
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
   var sheepCount = 0
   var mp: MediaPlayer? = null

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"


       val trialTime = Date()
       val calendar = GregorianCalendar()
       calendar.time = trialTime

       val hour = calendar.get(Calendar.HOUR_OF_DAY)
       if (hour in 1..11) {
           greeting = "おはよう"
       } else if (15 < hour) {
           greeting = "こんばんは"
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"

       //val sheepNum = 10
       //for (i in 1..sheepNum) {
       //    greeting += "。。。ひつじが" + i + "匹"
       //}

       greeting += "ねむれませんか?"

       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting

       mp = MediaPlayer.create(applicationContext, R.raw.sheep_cry1)


       rootLayout.setOnClickListener {
           sheepCount++
           val sheepText = "ひつじが$sheepCount 匹"
           textview.text = sheepText

           when(sheepCount % 2) {
               0 -> {                                              
                   imageView1.setImageResource(R.drawable.sheep_1)
                   mp?.start()                                    
               }
               else -> imageView1.setImageResource(R.drawable.sheep_2)
           }


       }



   }

   // ↓ここに追加
   override fun onPause() {
       super.onPause()
       Log.i("onPause", "眠るまでの回数=" + sheepCount)
   }


}




アプリが終了しても値を残す

 閲覧数:347 投稿日:2018-05-18 更新日:2018-05-19

値を保存する


SharedPreferences クラスを使用する

コード


▼MainActivity.kt

package work.w4c.android0.introducesleep20180426

import android.content.SharedPreferences
import android.media.MediaPlayer
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.preference.PreferenceManager
import android.util.Log
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
   var sheepCount = 0
   var mp: MediaPlayer? = null

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       var greeting = "こんにちは"


       val trialTime = Date()
       val calendar = GregorianCalendar()
       calendar.time = trialTime

       val hour = calendar.get(Calendar.HOUR_OF_DAY)
       if (hour in 1..11) {
           greeting = "おはよう"
       } else if (15 < hour) {
           greeting = "こんばんは"
       }

       //greeting += "。。。ひつじが1匹。。。ひつじが2匹。。。ひつじが3匹。。。"

       //val sheepNum = 10
       //for (i in 1..sheepNum) {
       //    greeting += "。。。ひつじが" + i + "匹"
       //}

       greeting += "ねむれませんか?"

       textview.text = greeting
       //findViewById<TextView>(R.id.textview).text = greeting

       mp = MediaPlayer.create(applicationContext, R.raw.sheep_cry1)


       rootLayout.setOnClickListener {
           sheepCount++
           val sheepText = "ひつじが$sheepCount 匹"
           textview.text = sheepText

           when(sheepCount % 2) {
               0 -> {
                   imageView1.setImageResource(R.drawable.sheep_1)
                   mp?.start()
               }
               else -> imageView1.setImageResource(R.drawable.sheep_2)
           }


       }



   }

   override fun onPause() {
       super.onPause()
       Log.i("onPause", "眠るまでの回数=$sheepCount")

       //値を保存する
       val sp: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) //追加
       sp.edit().putInt("SheepCount", sheepCount).apply()                              //追加
    }

   //保存した値を読み出す
   override fun onResume() {
       super.onResume()
       val sp: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) //追加
       val count = sp.getInt("SheepCount", -1)                                         //追加
       if (count >= 0) {                                                               //追加
           textview.text = "前回は$count 回羊を数えました。"                                 //追加
       }                                                                               //追加
   }

}



初めてのAndroidアプリ開発(Kotlin編)




週間人気ページランキング / 9-15 → 9-21
順位 ページタイトル抜粋 アクセス数
アクセスが、ありませんでした! 0
2024/9/22 1:02 更新