这个问题把我逼疯了。我确定我做错了什么,但我无法弄清楚。
我有一个静态 OnTouchListener,我将它附加到线性布局中包含的多个相同复合视图对象的 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 情况下执行返回命令。例如,使用 ACTION_DOWN,代码执行到返回命令,但随后直接进入默认情况并返回 false - 即使 Logcat 仍将操作报告为 ACTION-DOWN。
如果我尝试在返回命令上设置断点,IntelliJ 会说:“在类 com.amb.GearBuddyV2.views.CogPickerHelper$2 的第 X 行找不到可执行代码”
有谁知道我在这里做错了什么?