Android - 通过 2 个约束变量设置图像
Android - Set Image by 2 Constrained Variables
首先,我已经编写了几个月的代码,所以如果以下任何一项是非常基础的,我很抱歉......我对 Java 非常糟糕。
我希望根据两个变量(x 和 y,为简单起见)从虚构的 "grid/array" 中选择一个图像并显示该图像,使用手势 (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;
}
双击 return 到 "home" 图片:
@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 是我得到的最接近正确的代码。
这里是:
String seatNumber = "R.drawable.seat" + x + y;
int seat = Integer.valueOf(seatNumber);
正在尝试将字符串转换为数字,但这行不通,因为字符串不包含数字。你要找的是这个:
int seat = getResources().getIdentifier("seat" + x + y, "drawable", getPackageName());
发件人:
首先,我已经编写了几个月的代码,所以如果以下任何一项是非常基础的,我很抱歉......我对 Java 非常糟糕。
我希望根据两个变量(x 和 y,为简单起见)从虚构的 "grid/array" 中选择一个图像并显示该图像,使用手势 (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;
}
双击 return 到 "home" 图片:
@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 是我得到的最接近正确的代码。
这里是:
String seatNumber = "R.drawable.seat" + x + y;
int seat = Integer.valueOf(seatNumber);
正在尝试将字符串转换为数字,但这行不通,因为字符串不包含数字。你要找的是这个:
int seat = getResources().getIdentifier("seat" + x + y, "drawable", getPackageName());
发件人: