Android Seekbar thumb onclick прослушиватель

#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;
        }
    });
}