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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

2000閲覧

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

yu9718s

総合スコア9

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/01 08:53

ボタンを押すとランダムに画像を切り替えるものを作成したいのですがうまくいきません。 エラーの中を見るとランダムで画像ファイル名が選択されていることが確認できるためどう考えていけばわかりません。 どう考えていけばよいか教えていただけないでしょうか。
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) 

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/06/01 09:38

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

2020/06/02 00:05

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

回答1

0

ベストアンサー

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

xml

1<?xml version="1.0" encoding="utf-8"?> 2<resources> 3 <array name="gazou"> 4 <item>@drawable/pic1</item> 5 <item>@drawable/pic2</item> 6 <item>@drawable/pic3</item> 7 <item>@drawable/pic4</item> 8 <item>@drawable/pic5</item> 9 </array> 10</resources>

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


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

投稿2020/06/01 13:50

編集2020/06/01 14:08
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu9718s

2020/06/02 00:06

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問