首先,我已经编写了几个月的所有代码,所以我很抱歉如果以下任何内容都非常基本...我对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是最接近正确的,我已经得到。
现在返回以下错误代码......了java.lang.RuntimeException:无法实例活动ComponentInfo {com.flextronics.doordisplaydemo/COM .flextronics.doordisplaydemo.FlexSeat}:java.lang.NullPointerException:尝试调用空对象引用的虚拟方法'android.content.res.Resources android.content.Context.getResources()' –
确保该行位于方法,而不是外部。事实上,你需要在你需要之前重新评估它。 – weston
这是我的问题,用if/else处理不会超出“数组”范围,谢谢! –