【问题标题】:Android - Set Image by 2 Constrained VariablesAndroid - 通过 2 个约束变量设置图像
【发布时间】:2023-03-19 13:48:02
【问题描述】:

首先,我已经编写了几个月的代码,所以如果以下任何内容非常基本,我很抱歉......我对 Java 非常糟糕。

我希望根据两个变量(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 是我得到的最接近正确的代码。

【问题讨论】:

    标签: java android runtimeexception numberformatexception


    【解决方案1】:

    这里是:

    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

    【讨论】:

    • 现在返回以下错误代码... java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com.flextronics.doordisplaydemo/com.flextronics.doordisplaydemo.FlexSeat}: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”
    • 确保该行在方法内部,而不是外部。事实上,您需要在需要它之前重新评估它。
    • 这是我的问题,用 if/else 来处理不超出“数组”的问题,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2018-04-09
    相关资源
    最近更新 更多