这个问题让我陷入困境。我确定我做错了什么但我无法理解。
我有一个静态OnTouchListener,它附加到一个包含在linearlayout中的许多相同复合视图对象的TextView。这个监听器是一个帮助类。
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;
}
}
};
}
我在一个扩展线性布局的类
中将此侦听器连接到我的TextView mValueTextView.setOnTouchListener(CogPickerHelper.getValueTouchListener());
我的问题是该方法似乎没有在ACTION_DOWN,ACTION_UP和ACTION-MOVE情况下执行return命令。例如,使用ACTION_DOWN,代码执行到返回命令,但然后直接进入默认情况并返回false - 即使Logcat仍然将操作报告为ACTION-DOWN。
如果我尝试在返回命令上设置断点,IntelliJ会说:“在com.amb.GearBuddyV2.views.CogPickerHelper $ 2”的第X行找不到可执行代码
有谁知道我在这里做错了什么?
答案 0 :(得分:0)
您的代码似乎工作正常,正确地返回 OnTouch 返回值。
是的,在return语句中添加一个break将导致调试器抱怨缺少可执行代码。