前提・実現したいこと
android studio のkotlinでおみくじのアプリを作りたいです。アプリ自体は起動するのですが画面のボタンが反応せず困っています。私は初心者で本を買いコードをうつしています。エラーメッセージもなく改善する場所がわかりません。
ぜひ回答よろしくお願いします
発生している問題・エラーメッセージ
該当のソースコード
ソースコード package jp.wings.nikkeibp.omikuji import android.os.Bundle import android.os.PersistableBundle import android.view.View import android.view.animation.Animation import android.view.animation.AnimationSet import android.view.animation.RotateAnimation import android.view.animation.TranslateAnimation import android.widget.ImageView import kotlinx.android.synthetic.main.omikuji.* import java.util.* class OmikujiBox: Animation.AnimationListener { lateinit var omikujiView: ImageView var finish = false // 箱から出たか? val number: Int // くじ番号 (0~19の乱数) get() { var rnd = Random() return rnd.nextInt(20) } fun shake() { val translate = TranslateAnimation(0f, 0f, 0f, -200f) translate.repeatMode = Animation.REVERSE translate.repeatCount = 5 translate.duration = 100 val rotate = RotateAnimation(0f, -36f, omikujiView.width / 2f, omikujiView.height / 2f) rotate.duration = 200 val set = AnimationSet(true) set.addAnimation(rotate) set.addAnimation(translate) set.setAnimationListener(this) omikujiView.startAnimation(set) finish = true } override fun onAnimationRepeat(animation: Animation?) { } override fun onAnimationEnd(animation: Animation?) { omikujiView.setImageResource(R.drawable.omikuji2) } override fun onAnimationStart(animation: Animation?) { } ```ここに言語を入力 コード
package jp.wings.nikkeibp.omikuji
import android.os.Bundle
import android.os.PersistableBundle
import android.view.MotionEvent
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.fortune.*
import kotlinx.android.synthetic.main.omikuji.*
class OmikujiActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onCreate(savedInstanceState, persistentState) setContentView(R.layout.omikuji) } // おみくじ棚の配列 val omikujiShelf = Array<OmikujiParts>(20) { OmikujiParts(R.drawable.result2, R.string.contents1) } // おみくじ番号保管用 var omikujiNumber = -1 val omikujiBox = OmikujiBox() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.omikuji) omikujiBox.omikujiView = imageView // おみくじ棚の準備 omikujiShelf[0].drawID = R.drawable.result1 omikujiShelf[0].fortuneID = R.string.contents2 omikujiShelf[1].drawID = R.drawable.result3 omikujiShelf[1].fortuneID = R.string.contents9 omikujiShelf[2].fortuneID = R.string.contents3 omikujiShelf[3].fortuneID = R.string.contents4 omikujiShelf[4].fortuneID = R.string.contents5 omikujiShelf[5].fortuneID = R.string.contents6
/*
// くじ番号の取得
val rnd = Random()
val number = rnd.nextInt(20)
// おみくじ棚の準備 val omikujiShelf = Array<String>(20,{"吉"}) omikujiShelf[0] = "大吉" omikujiShelf[19] = "凶" // おみくじ棚から取得 val str = omikujiShelf[number] hello_view.text = str
*/
}
fun onButtonClick(v:View) { omikujiBox.shake()
/*
val translate = TranslateAnimation(0f,0f,0f,-200f)
translate.repeatMode = Animation.REVERSE
translate.repeatCount = 5
translate.duration = 100
val rotate = RotateAnimation(0f,-36f,imageView.width/2f,imageView.height/2f) rotate.duration = 200 val set = AnimationSet(true) set.addAnimation(rotate) set.addAnimation(translate) imageView.startAnimation(set)
*/
// imageView.setImageResource(R.drawable.result1)
}
fun drawResult() { // おみくじ番号を取得する omikujiNumber = omikujiBox.number // おみくじ棚の配列から、omikujiPartsを取得する val op = omikujiShelf[omikujiNumber] // レイアウトを運勢表示に変更する setContentView(R.layout.fortune) // 画像とテキストを変更する imageView2.setImageResource(op.drawID) textView.setText(op.fortuneID) } override fun onTouchEvent(event: MotionEvent?): Boolean { if (event?.action == MotionEvent.ACTION_DOWN){ if (omikujiNumber < 0 && omikujiBox.finish) { drawResult() } } return super.onTouchEvent(event) }
}
```ここに言語を入力 package jp.wings.nikkeibp.omikuji data class OmikujiParts(var drawID: Int, var fortuneID: Int)
コード<resources> <string name="app_name">Omikuji1</string> <string name="bt_action">うらなう</string> <string name="contents1">あ</string> <string name="contents2">a</string> <string name="contents3">aa</string> <string name="contents4">aaa</string> <string name="contents5">aaaaa</string> <string name="contents6">aaaaaa</string> <string name="contents7">aaaaaaa</string> <string name="contents8">aaaaaaaaaaa</string> <string name="contents9">aaaaaaaaaaa</string> </resources>
コード<?xml version="1.0" encoding="ISO-8859-1"?> <LinearLayout android:orientation="vertical" android:gravity="center_horizontal|center_vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/imageView" android:layout_height="wrap_content" android:layout_width="match_parent" app:srcCompat="@drawable/omikuji1" android:layout_weight="1"/> <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="@string/bt_action"/> </LinearLayout>
コード<?xml version="1.0" encoding="ISO-8859-1"?> <RelativeLayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" app:srcCompat="@drawable/result1"/> <TextView android:id="@+id/textView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="TextView" android:width="200dp"/> </RelativeLayout>
試したこと
一度新規でプロジェクトを立ち上げなおしコピーしました