эта проблема сводит меня с ума. Я уверен, что делаю что-то не так, но я не могу понять это.
У меня есть статический OnTouchListener, который я прикрепляю к TextView ряда идентичных составных объектов представления, содержащихся в linearlayout. Этот слушатель находится во вспомогательном классе.
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 код выполняется до команды return, но затем переходит непосредственно к случаю по умолчанию и возвращает false, даже несмотря на то, что Logcat по-прежнему сообщает о действии как ACTION-DOWN.
Если я пытаюсь установить точку останова для команд возврата, IntelliJ говорит: «В строке X в классе com.amb.GearBuddyV2.views.CogPickerHelper$2 не найден исполняемый код».
Кто-нибудь знает, что я делаю неправильно здесь?