質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

ボタンを押下するたびに背景画像をランダムに切り替える

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 216

yu9718s

score 9

ボタンを押すとランダムに画像を切り替えるものを作成したいのですがうまくいきません。
エラーの中を見るとランダムで画像ファイル名が選択されていることが確認できるためどう考えていけばわかりません。
どう考えていけばよいか教えていただけないでしょうか。
import android.annotation.SuppressLint
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.math.floor


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.i("MainActivity", "onCreate")

        val btClick = findViewById<Button>(R.id.btClick)
        val listener = HelloListener()
        btClick.setOnClickListener(listener)

        val iv1 = findViewById<ImageView>(R.id.iv1)

    }
    private inner class HelloListener : View.OnClickListener {
        @SuppressLint("Recycle")
        override fun onClick(v: View?) {
            val i = Log.i("MainActivity", "onClick")

            val gazouArray = resources.obtainTypedArray(R.array.gazou)
            val rand = floor(Math.random() * 5).toInt()

            val drawable: Drawable? = gazouArray.getDrawable(rand);

            iv1.setImageDrawable(drawable)

        }
    }
}


2020-06-01 17:47:14.062 30035-30035/jp.co.stv_tech.test213 E/AndroidRuntime: FATAL EXCEPTION: main
Process: jp.co.stv_tech.test213, PID: 30035
android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID #0x0
Caused by: android.content.res.Resources$NotFoundException: File money_2 from drawable resource ID #0x0
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
at android.content.res.Resources.loadDrawable(Resources.java:897)
at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:955)
at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
at jp.co.stv_tech.test213.MainActivity$HelloListener.onClick(MainActivity.kt:38)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.io.FileNotFoundException: money_2
at android.content.res.AssetManager.nativeOpenNonAsset(Native Method)
at android.content.res.AssetManager.openNonAsset(AssetManager.java:857)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:836)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
at android.content.res.Resources.loadDrawable(Resources.java:897)
at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:955)
at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
at jp.co.stv_tech.test213.MainActivity$HelloListener.onClick(MainActivity.kt:38)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hoshi-takanori

    2020/06/01 18:38

    ランダムな画像はどこにありますか? また、R.array.gazou はどんな値ですか?

    キャンセル

  • yu9718s

    2020/06/02 09:05

    ご返信ありがとうございます。
    ご質問いただいたところ、申し訳ございませんが
    他の方の回答で解決いたしました。
    これからも質問をのせていくと思いますので、機会がございましたらご教示いただきたく存じます。

    キャンセル

回答 1

checkベストアンサー

0

res/drawableの下に表示したい画像ファイル(例えばpic1.png〜pic5.png)を5つ格納し、res配下の適当な場所に用意したXMLファイル(例えばres/values/arrays.xmlなど)に

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="gazou">
        <item>@drawable/pic1</item>
        <item>@drawable/pic2</item>
        <item>@drawable/pic3</item>
        <item>@drawable/pic4</item>
        <item>@drawable/pic5</item>
    </array>
</resources>

のように記述すれば、質問のコードそのままで正常に動作するように思います。これらの情報から、今行っている作業で誤りがある箇所を検討してみてはいかがでしょうか。


あ、recycle()がないのはまずいか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/02 09:06

    @drawable/
    こちらをつけていなかったために起こっていたエラーでした。
    ご回答ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る