Android - Установить изображение по 2 ограниченным переменным

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

Я хочу выбрать изображение из воображаемой "сетки / массива", основанной на двух переменных (x и y, чтобы было проще), и отобразить это изображение, используя жесты (пролистывание) для перемещения между различными изображениями. В моем коде нет красных линий, но каждый раз, когда я запускаю 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 как можно ближе к тому, чтобы исправить то, что я получил.

1 ответ

Решение

Это здесь:

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

Пытается преобразовать строку в число, но это не сработает, так как строка не содержит числа. То, что вы ищете, это:

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

От: /questions/35793145/android-poluchit-identifikator-resursa-iz-stroki/35793156#35793156

Другие вопросы по тегам