#android #android-seekbar
#Android #android-панель поиска
Вопрос:
Я создал свое музыкальное приложение, и теперь мне нужно настроить управление воспроизведением / паузой музыки на панели поиска. Вот изображение
Как вы можете видеть, есть seekbar
пользовательское изображение большого пальца, и когда пользователь нажимает на музыку большого пальца, начинается воспроизведение или остановка, возможно ли реализовать что-то подобное? В принципе, мне нужно реализовать прослушиватель только для seekbar
большого пальца. Я знаю, как получить thumb, seekbar
однако thumb drawable
, поэтому я не могу реализовать какой-либо слушатель. audioSeekBar.getThumb()
Комментарии:
1. как насчет SeekBarChangeListener?
2. @ Opiatefuchs
SeekBarChangeListener
срабатывает при касании панели поиска, что мне нужно, так это каким-то образом узнать, когда задет большой палец панели поиска3. действительно такой особенный, как этот? Итак, вы хотите добавить функцию, которая не выполняется при нажатии панели поиска, только при нажатии большого пальца, правильно?
4. @ Opiatefuchs, да, это именно то, что мне нужно.
5. Таким образом, такого метода не существует, но я думаю, вы можете найти обходной путь, отслеживая позицию. Например, создайте OnTouchListener, который позволяет искать, является ли событие движения ACTION_MOVE, и прослушивать ACTION_DOWN / ACTION_UP ……
Ответ №1:
Вы должны прослушать TouchEvent, вычислить, где находится это касание на большом пальце панели поиска, и предотвратить вызов события щелчка, когда пользователь переместил панель поиска, но не нажал.
Что-то вроде этого:
seekBar.setOnTouchListener(new View.OnTouchListener() {
float prevX = Float.MIN_VALUE;
float eps = 0.001f;
@Override
public boolean onTouch(View v, MotionEvent event) {
Drawable drawable = seekBar.getThumb();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (event.getX() >= drawable.getBounds().left amp;amp; event.getX() <= drawable.getBounds().right
amp;amp; event.getRawY() >= drawable.getBounds().top amp;amp; event.getRawY() >= drawable.getBounds().bottom) {
prevX = event.getX();
}
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getX() >= drawable.getBounds().left amp;amp; event.getX() <= drawable.getBounds().right
amp;amp; event.getRawY() >= drawable.getBounds().top amp;amp; event.getRawY() >= drawable.getBounds().bottom) {
if (Math.abs(event.getX() - prevX) < eps) {
Log.d("here", "clicked on place");
}
}
prevX = Float.MIN_VALUE;
}
return false;
}
});
}