(Java Newbee) ImageView Problem - setImageResource() dynamisch setzen?

  • Antworten:4
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 3

16.10.2012, 15:41:27 via Website

Hallo Leute,

ich finde AndroidPit klasse und bin neu im Forum. Ich versuche mich grad an meiner ersten Android Application und lerne gleichzeitig Java.

Ich habe in meinem Mainlayout ein ImageView (showCardImage) und einen Button (btnSendImage) erstellt. Wenn man auf den Button klickt wird in meiner Klasse "MainActivity" die Funktion "imageButtonClick()" aufgerufen, welche dafür sorgen soll, dass ein anderes Bild angezeigt wird.

activity_main.xml
1<ImageView
2 android:id="@+id/showCardImage"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:layout_alignTop="@+id/button1"
6 android:layout_toLeftOf="@+id/button1"
7 android:src="@drawable/imageNotYetModiefied" />
8
9 <Button
10 android:id="@+id/btnSendImage"
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content"
13 android:layout_alignRight="@+id/showCardImage"
14 android:layout_below="@+id/showCardImage"
15 android:onClick="imageButtonClick"
16 android:text="Button" />

Das Bild welches von Anfang an angezeigt wird und die Bilder, welche geladen werden sollen habe ich in meine "res/drawable.../ Order abgelegt.

Folgender Code würde "neueKarte.png" bei Klick des Buttons anzeigen:

MainActivity.java
1...
2...
3public void imageButtonClick(View view) {
4 ImageView image = (ImageView)findViewById(R.id.showCardImage);
5 image.setImageResource(R.drawable.neueKarte);
6 }

FRAGE >_>

In der Funktion habe ich ein String Array, welches die Namen der Bilder beinhaltet, die in "res/drawable.../ liegen. Es wird später dynamisch mit einem random-integer-Wert einer dieser Dateinamen ermittelt. Wie komme ich an den Ressource-Integer-Wert des Bildes mit dem ermittelten String (Dateiname) ?

MainActivity.java
1...
2...
3public void imageButtonClick(View view) {
4
5 // Folgende Variable gibt den Dateinamen eines Bildes aus
6 // deck[randomIndex].toString();
7
8 ImageView image = (ImageView)findViewById(R.id.showCardImage);
9
10 // Wie kann ich das Bild für den ermittelten Dateiname hier setzen?
11 // image.setImageResource( WAS KOMMT HIER REIN? );
12 }


Newbee Frage :*) :*) :*)

Danke schonmal :D

— geändert am 16.10.2012, 15:44:30

Antworten
Christian
  • Forum-Beiträge: 307

16.10.2012, 20:37:28 via Website

Hi Salvatore Eckel,

auf Dateien im Res Ordner kannst du nur per ID(int) zugreifen.

Warum speicherst du nicht die IDs in einen Array und wenn du dann den Button drückst wird dein Bild angezeigt.

1int[] arrayID = {R.id.bild01,R.id.bild02,R.id.bild03};
2ImageView image = (ImageView)findViewById(R.id.showCardImage);
3
4public void imageButtonClick(View view) {
5
6 // Folgende Variable gibt den Dateinamen eines Bildes aus
7 // deck[randomIndex].toString();
8
9 // Bild anzeigen
10 image.setImageResource(arrayID[randomIndex] );
11 }

Hoffe das bringt dich weiter.

Mfg Christian

Antworten
Gelöschter Account
  • Forum-Beiträge: 3

17.10.2012, 09:35:11 via Website

Hi Christian,

gestern Abend hab ich es auch ähnlich wie du es beschreibst gelöst:

MainActivity.java
1public void buttonClick(View view) {
2 // Array von "Drawable"-Objekten
3 Drawable[] drawableCards = {
4 getResources().getDrawable(R.drawable.bild01),
5 getResources().getDrawable(R.drawable.bild02),
6 getResources().getDrawable(R.drawable.bild03),
7 getResources().getDrawable(R.drawable.bild04),
8 ...
9 }
10
11 ImageView image = (ImageView)findViewById(R.id.showCardImage);
12
13 // Bild ändern
14 image.setImageDrawable(drawableCards[randomIndex]);
15...
16...
17}

Anstatt der Funktion setImageResource(int) habe ich dann setImageDrawable(Drawable) benutzt.


Ich habe eine Frage zu deinem Vorschlag Christian:
Christian Hempe schrieb:
1int[] arrayID = {R.id.bild01,R.id.bild02,R.id.bild03};

Über R.id.xxxx komme ich doch nicht an meine abgelegten Drawables, sondern nur mit R.drawable.xxxx, oder?


Uuuuund noch eine Frage ;)
Wo sollte ich meine Objekte am besten deklarieren? Hier habe ich sie in der Funktion deklariert, oder lieber ausserhalb der Funktion als puplic Variablen? ..


Vielen Dank und LG
Salvatore

Antworten
Christian
  • Forum-Beiträge: 307

18.10.2012, 12:37:38 via Website

Hi Salvatore Eckel,


Über R.id.xxxx komme ich doch nicht an meine abgelegten Drawables, sondern nur mit R.drawable.xxxx, oder?

Da hast du natürlich vollkommen Recht es muss "drawable" nicht "Id" heißen.
Sry war mein Fehler.


Wo sollte ich meine Objekte am besten deklarieren? Hier habe ich sie in der Funktion deklariert, oder lieber ausserhalb der Funktion als puplic Variablen? ..

Wenn du damit das Array und die ImageView meinst dann ja. Aber falls du die beiden nicht von außerhalb der Klasse ansprechen möchtest würde ich sie private setzen.

Beispiel:
1public DeineKlasse extend Activity
2{
3
4 private Drawable[] drawableCards;
5 private ImageView image;
6
7 //Oncreate Funktion
8 onCreate(){
9
10 drawableCards = {getResources().getDrawable(R.drawable.bild01),
11 getResources().getDrawable(R.drawable.bild02),
12 getResources().getDrawable(R.drawable.bild03),
13 getResources().getDrawable(R.drawable.bild04),
14 ...
15 }
16
17 image = (ImageView)findViewById(R.id.showCardImage);
18 }
19
20 //Button klick
21 public void buttonClick(View view) {
22
23 image.setImageDrawable(drawableCards[randomIndex]);
24 }
25
26}

mfg Christian

Antworten
Gelöschter Account
  • Forum-Beiträge: 3

18.10.2012, 12:46:21 via Website

Ok klingt logisch :)
Danke dir.

lg Salvatore

Antworten