Java 安卓OnTouch赢得';t执行返回命令
这个问题快把我逼疯了。我肯定我做错了什么,但我想不出来 我有一个静态OnTouchListener,它连接到linearlayout中包含的许多相同的复合视图对象的TextView。此侦听器位于帮助器类中Java 安卓OnTouch赢得';t执行返回命令,java,android,intellij-idea,ontouchlistener,Java,Android,Intellij Idea,Ontouchlistener,这个问题快把我逼疯了。我肯定我做错了什么,但我想不出来 我有一个静态OnTouchListener,它连接到linearlayout中包含的许多相同的复合视图对象的TextView。此侦听器位于帮助器类中 public static View.OnTouchListener getValueTouchListener() { return new View.OnTouchListener() { private int lastY; private
public static View.OnTouchListener getValueTouchListener() {
return new View.OnTouchListener() {
private int lastY;
private int lastX;
@Override
public boolean onTouch(View v, MotionEvent event) {
TextView view = (TextView)v;
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
view.setBackgroundResource(R.drawable.cog_pressed);
lastY = (int)event.getY();
lastX = (int)event.getX();
return true;
case MotionEvent.ACTION_MOVE:
//calc size of movement
int deltaY = lastY - (int)event.getY();
int deltaX = lastX - (int)event.getX();
// pass gesture up to parent if it's a big x movement - assumes user wishes to scroll parent
if (Math.abs(deltaX) > TOUCH_SLOP *2) {
return false;
}
lastX = (int)event.getX();
//process movement if larger than a touch slop
if (StrictMath.abs(deltaY) > TOUCH_SLOP) {
// reset last touch position
lastY = (int)event.getY();
//get direction of movement
int dir = (deltaY < 0)? -1 : 1;
//change index if within min and max limits
int min = (view.getTag() == Chainring.KEY)? Chainring.MIN_COG : Sprocket.MIN_COG;
int max = (view.getTag() == Chainring.KEY)? Chainring.MAX_COG : Sprocket.MAX_COG;
int value = Integer.valueOf(view.getText().toString());
if ((dir == -1 && value > min) || (dir == 1 && value < max)) {
value = value + dir;
view.setText(String.valueOf(value));
view.playSoundEffect(SoundEffectConstants.CLICK);
}
}
return true;
case MotionEvent.ACTION_UP:
view.setBackgroundResource(R.drawable.cog_unpressed);
return true;
case MotionEvent.ACTION_CANCEL:
view.setBackgroundResource(R.drawable.cog_unpressed);
return false;
default:
return false;
}
}
};
}
我的问题是,在ACTION\u DOWN、ACTION\u UP和ACTION-MOVE情况下,该方法似乎没有执行return命令。例如,当一个ACTION_关闭时,代码执行到return命令为止,但随后直接进入默认情况并返回false,即使Logcat仍将该操作报告为ACTION-DOWN
如果我试图在返回命令上设置断点,IntelliJ会说:“在com.amb.GearBuddyV2.views.CogPickerHelper$2类的X行中找不到可执行代码”
有人知道我做错了什么吗?您的代码似乎工作正常,返回值正确
是的,在return语句中添加一个break将导致调试器抱怨缺少可执行代码。我想这是我的观点,代码不起作用。我无法在前三种情况下返回true,因此我基本上无法使用该事件。。。而且,从逻辑上讲,我不理解当每种情况都以return语句结束时,如何在同一过程中切换到两种情况。此外,我还可以在ACTION_CANCEL案例中的return语句上添加一个断点,令人烦恼的是,该断点将返回值并允许我使用事件。调试似乎荒谬地将您引入了两种不同的案例,可能是因为编译器对开关代码进行了优化,调试器无法很好地将其与实际源代码匹配。您是否尝试过使用布尔变量首先保留返回值,而不是立即返回?调试器应该允许您逐步完成这个简单的变量分配,并向您显示要返回的具体分配内容。谢谢您的评论,kheld。我创建了一个布尔值,然后用一个break命令结束每个案例。。。它确实如你所期望的那样工作。我会按照这个计划去做——可惜我不明白为什么一个可行,另一个不行。
mValueTextView.setOnTouchListener(CogPickerHelper.getValueTouchListener());