2016-10-10 1 views
0

Во-первых, я кодировал все несколько месяцев, поэтому я сожалею, если одно из следующих является очень простым ... Я довольно ужасен с Java.Android - установите изображение с помощью 2 ограниченных переменных

Я ищу, чтобы выбрать изображение из воображаемой «сетки/массива» на основе двух переменных (x и y, чтобы оно было простым) и отобразить это изображение, используя жесты (fling) для перемещения между различными изображениями , У меня нет красных строк в моем коде, но каждый раз, когда я запускаю Activity, я получаю код ошибки внизу.

Я также не уверен, как использовать 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/ком .flextronics.doordisplaydemo.FlexSeat}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.content.res.Resources android.content.Context.getResources()' на ссылке нулевого объекта –

+0

Убедитесь, что строка находится внутри метод, а не снаружи. На самом деле вам нужно переоценить это как раз перед тем, как оно вам понадобится. – weston

+0

Это была моя проблема, если if/else обрабатывать не выходя за пределы массива, спасибо! –

Смежные вопросы