2016-10-10 10 views
0

首先,我已經編寫了幾個月的所有代碼,所以我很抱歉如果以下任何內容都非常基本...我對Java非常糟糕。Android - 由2個約束變量設置圖片

我正在尋找一個基於兩個變量(x和y,以保持簡單)從想象的「網格/數組」中選擇圖像,並使用手勢(fling)在不同圖像之間移動。我的代碼中沒有紅線,但每次啓動活動時,我都會在底部獲得錯誤代碼。

我也不確定如何使用Integer.MAX_VALUE和Integer.MIN_VALUE約束兩個變量,以便應用程序不會嘗試拉取不存在的值。 X可以是1-5,y可以是1-3,我不知道如何限制它們......文件名是「seat11.png」到「seat53.png」。

下面是相關的代碼示例:

設置整數:

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); 

相關的手勢:

@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; 
} 

隨着雙擊返回到 「家」 的形象:

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

我收到以下錯誤文本:

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" 

我已經試過幾乎所有我能想到的(並找到在其他的答案),我在全盤損失。代碼提供SEEMS是最接近正確的,我已經得到。

回答

0

此位置:

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

試圖將字符串轉換爲數字,但由於串不包含一個數字,將無法正常工作。什麼你要找的是這樣的:

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

來源:https://stackoverflow.com/a/19093447/360211

+0

現在返回以下錯誤代碼......了java.lang.RuntimeException:無法實例活動ComponentInfo {com.flextronics.doordisplaydemo/COM .flextronics.doordisplaydemo.FlexSeat}:java.lang.NullPointerException:嘗試調用空對象引用的虛擬方法'android.content.res.Resources android.content.Context.getResources()' –

+0

確保該行位於方法,而不是外部。事實上,你需要在你需要之前重新評估它。 – weston

+0

這是我的問題,用if/else處理不會超出「數組」範圍,謝謝! –