首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由2个约束变量组成的Android集图像

由2个约束变量组成的Android集图像
EN

Stack Overflow用户
提问于 2016-10-10 21:43:00
回答 1查看 32关注 0票数 0

首先,我已经编码了几个月,所以我很抱歉,如果下面的任何一个是非常基本的.我和Java相处得很糟糕。

我希望根据两个变量(x和y,保持简单)从想象中的“网格/数组”中选择一个图像,并显示该图像,使用手势(Fling)在不同的图像之间移动。我的代码中没有红线,但是每次启动活动时,我都会得到底部的错误代码。

我也不知道如何使用Integer.MAX_VALUE和Integer.MIN_VALUE来约束这两个变量,这样应用程序就不会试图为一个不存在的值提取。X可以是1-5,y可以是1-3,我不知道如何约束它们.文件名是"seat11.png“和"seat53.png”。

以下是相关的代码示例:

设置整数:

代码语言:javascript
复制
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);

相关手势:

代码语言:javascript
复制
@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;
}

通过双击返回到"home“图像:

代码语言:javascript
复制
@Override
public boolean onDoubleTap(MotionEvent e) {
    x = 3;
    y = 1;
    seatImage.setImageResource(seat);
    return true;
}

我得到以下错误文本:

代码语言:javascript
复制
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"

我已经尝试了我所能想到的一切(并在其他答案中找到),我完全不知所措。提供的代码似乎是我得到的最接近纠正的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-10 22:22:45

这里:

代码语言:javascript
复制
String seatNumber = "R.drawable.seat" + x + y;
int seat = Integer.valueOf(seatNumber);

正在尝试将字符串转换为数字,但由于字符串不包含数字,因此无法工作。你要找的是:

代码语言:javascript
复制
int seat = getResources().getIdentifier("seat" + x + y, "drawable", getPackageName());

来自:https://stackoverflow.com/a/19093447/360211

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39967200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档