2016-10-10 1 views
0

Zunächst einmal, ich habe für alle ein paar Monate codiert, so tut mir leid, wenn einer der folgenden ist sehr einfach ... Ich bin ziemlich schrecklich mit Java.Android - Set Bild von 2 Constrained Variablen

Ich suche ein Bild aus einem imaginären "Grid/Array" basierend auf zwei Variablen (x und y, um es einfach zu halten) und zeige das Bild mit Gesten (Fling), um zwischen verschiedenen Bildern zu bewegen . Ich habe keine roten Linien in meinem Code, aber jedes Mal, wenn ich die Aktivität starte, erhalte ich den Fehlercode unten.

Ich bin auch nicht sicher, wie Integer.MAX_VALUE und Integer.MIN_VALUE verwendet werden, um die zwei Variablen zu beschränken, so dass die App nicht versucht, für einen Wert zu ziehen, der nicht vorhanden ist. X kann von 1-5 sein, und y kann von 1-3 sein, und ich weiß nicht, wie man sie einschränkt ... Dateinamen sind "seat11.png" bis "seat53.png".

Hier sind die relevanten Codebeispiele:

Einstellung ganzen Zahlen:

private GestureDetectorCompat gestureDetector; 
public ImageView seatImage; 
private static final int SWIPE_THRESHOLD = 100; 
private static final int SWIPE_VELOCITY_THRESHOLD = 100;  
int x = 3; 
int y = 1; 
String seatNumber = "R.drawable.seat" + x + y; 
int seat = Integer.valueOf(seatNumber); 

Relevante Geste:

@Override 
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    boolean result = false; 
    try { 
     float diffY = e2.getY() - e1.getY(); 
     float diffX = e2.getX() - e1.getX(); 
     if (Math.abs(diffX) > Math.abs(diffY)) { 
      if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
       if (diffX > 0) { 
        //swipe right// 
        x = x + 1; 
        seatImage.setImageResource(seat); 

       } else { 
        //swipe left// 
        x = x - 1; 
        seatImage.setImageResource(seat); 
       } 
      } 

      result = true; 
     } 
     else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
      if (diffY > 0) { 
       //swipe down// 
       y = y - 1; 
       seatImage.setImageResource(seat); 
      } else { 
       //swipe up// 
       y = y + 1; 
       seatImage.setImageResource(seat); 
      } 
     } 
     result = true; 

    } catch (Exception exception) { 
     exception.printStackTrace(); 
    } 
    return result; 
} 

Mit einem Doppel-Tippen auf das "Home" Bild zurück:

@Override 
public boolean onDoubleTap(MotionEvent e) { 
    x = 3; 
    y = 1; 
    seatImage.setImageResource(seat); 
    return true; 
} 

Ich erhalte die folgende Fehlertext:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.flextronics.doordisplaydemo/com.flextronics.doordisplaydemo.FlexSeat}: java.lang.NumberFormatException: Invalid int: "R.drawable.seat32" 
Caused by: java.lang.NumberFormatException: Invalid int: "R.drawable.seat32" 

ich ich kann so ziemlich alles versucht haben, denken Sie an (und in anderen Antworten finden) und ich bei einem Totalverlust bin. Der Code zur Verfügung gestellt SEEMS zu sein, die am nächsten zu korrigieren, die ich bekommen habe.

Antwort

0

hier folgt aus:

String seatNumber = "R.drawable.seat" + x + y; 
int seat = Integer.valueOf(seatNumber); 

versucht, die Zeichenfolge in eine Zahl zu konvertieren, aber das wird nicht funktionieren, da der String keine Zahl enthält. Was Sie suchen, ist dies:

int seat = getResources().getIdentifier("seat" + x + y, "drawable", getPackageName()); 

Von: https://stackoverflow.com/a/19093447/360211

+0

Jetzt gibt den folgenden Fehlercode ... java.lang.RuntimeException: Kann Aktivität ComponentInfo {com.flextronics.doordisplaydemo/com instanziiert .flextronics.doordisplaydemo.FlexSeat}: java.lang.NullPointerException: Versuch, die virtuelle Methode 'android.content.res.Resources android.content.Context.getResources()' für eine Nullobjekt-Referenz aufzurufen –

+0

Stellen Sie sicher, dass die Zeile innerhalb von a liegt Methode, nicht außerhalb. In der Tat müssen Sie das neu bewerten, bevor Sie es brauchen. – weston

+0

Das war mein Problem, mit einem If/Else zu umgehen nicht außerhalb der "Array", danke! –