Нужна помощь в разработке вертикальной панели поиска, которая начинается с середины и движется в обе стороны. [50, 0, 50] - PullRequest
0 голосов
/ 04 июля 2019

Я разрабатывал приложение эквалайзера, и мне нужно создать вертикальную seekbar, которая начинается с середины. Я искал несколько вертикальных панелей поиска, но onDraw предназначен для поисковых панелей, которые начинаются снизу и поднимаются вверх. Мне нужно изменить onDraw, чтобы seekbar начинался с середины, а большой палец хода двигался в любую сторону.

Я попытался изменить этот код для horizontal seekbar, как это

enter image description here

но мне нужна вертикальная версия этого и не уверен, как изменить метод onDraw(). Прикрепленный код предназначен для горизонтальной версии панели поиска, которую я пытаюсь изменить. Может кто-нибудь подсказать мне, как работать с rect.set(), чтобы создавать собственные представления или предоставить рабочую версию.

private int seekbar_height = 6;
@Override
protected synchronized void onDraw(Canvas canvas) {

    rect.set(getThumbOffset(),
            (getHeight() / 2) - (seekbar_height / 2),
            getWidth() - getThumbOffset(),
            (getHeight() / 2) + (seekbar_height / 2));

    paint.setColor(Color.GRAY);

    canvas.drawRect(rect, paint);


    if (this.getProgress() > 13) {


        rect.set(getWidth() / 2,
                (getHeight() / 2) - (seekbar_height / 2),
                getWidth() / 2 + (getWidth() / 26) * (getProgress() - 13),
                getHeight() / 2 + (seekbar_height / 2));

        paint.setColor(ContextCompat.getColor(getContext(),R.color.color_polestar_accept));
        canvas.drawRect(rect, paint);

    }

    if (this.getProgress() < 13) {

        rect.set(getWidth() / 2 - ((getWidth() / 26) * (13 - getProgress())),
                (getHeight() / 2) - (seekbar_height / 2),
                getWidth() / 2,
                getHeight() / 2 + (seekbar_height / 2));

        paint.setColor(ContextCompat.getColor(getContext(),R.color.color_polestar_accept));
        canvas.drawRect(rect, paint);

    }

    super.onDraw(canvas);
}
...