Практикуюсь, решил сделать что-то типа гитары, но не придумаю, как правильно обрабатывать нажатия.
Есть 6 струн и надо, когда палец касается верхней струны и идет вниз (зацепляя остальные), чтобы к ним всем, по очереди, применялись анимации.
Смог сделать это только при одиночном касании, если по очереди нажимать на струны то все работает, если прислонить палец о водить по экрану то нет.
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
switch (v.getId()) {
case R.id.string1:
str1.startAnimation(touch_string);
return false;
case R.id.string2:
str2.startAnimation(touch_string);
return false;
case R.id.string3:
str3.startAnimation(touch_string);
return false;
case R.id.string4:
str4.startAnimation(touch_string);
return false;
case R.id.string5:
str5.startAnimation(touch_string);
return false;
case R.id.string6:
str6.startAnimation(touch_string);
return false;
}
}
return false;
}
Игрался с различными экшенами MotionEvent, но ничего не получилось, как же это правильно реализовать?
Буду благодарен за ответ!
Ответ
Потому что в данном случае нужно отслеживать не ACTION_DOWN, а ACTION_MOVE . Определите нужную область, повесьте слушатель и обработайте как необходимо. К примеру, берете положение и при совпадении в определенных координатах/промежутке координат выполняйте действие
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
x = event.getRawX();
y = event.getRawY();
//TODO обработать нужные места
...
break;
}
return true;
}
Комментариев нет:
Отправить комментарий