Страницы

Поиск по вопросам

вторник, 16 октября 2018 г.

Обработка касаний (струны в гитаре)

Практикуюсь, решил сделать что-то типа гитары, но не придумаю, как правильно обрабатывать нажатия.
Есть 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; }

Комментариев нет:

Отправить комментарий