настраиваемая панель поиска с несколькими цветами - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь создать пользовательскую панель поиска в Android с многоцветной. Я попробовал ниже код

customseekbar.java

int proBarWidth = getWidth();
int proBarHeight = getHeight();
int thumboffset = getThumbOffset();
int lastproX = 0;
int proItemWidth, proItemRight;
for (int i = 0; i < mproItemsList.size(); i++) {
proItem proItem = mproItemsList.get(i);
Paint proPaint = new Paint();
proPaint.setColor(getResources().getColor(proItem.color));

proItemWidth = (int) (proItem.proItemPercentage
        * proBarWidth / 100);

proItemRight = lastproX + proItemWidth;

// for last item give right of the pro item to width of the
// pro bar
if (i == mproItemsList.size() - 1
        && proItemRight != proBarWidth) {
    proItemRight = proBarWidth;
}
Rect proRect = new Rect();
proRect.set(lastproX, thumboffset / 2, proItemRight,
        proBarHeight - thumboffset / 2);
canvas.drawRect(proRect, proPaint);
lastproX = proItemRight;
}
super.onDraw(canvas);

вид

<mypackage.customseekbar
android:id="@+id/customseekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="0"
android:progressDrawable="@android:color/transparent"
android:thumb="@drawable/seek_thumb_normal"
android:thumbOffset="12dp" />

Я использовал этот метод в MainMenuActivity. Это дает мне результат что-то вроде ниже. Я ссылался на эту ссылку https://azzits.wordpress.com/2013/11/17/customseekbar/ enter image description here

Но я ожидаю что-то вроде ниже enter image description here

Есть ли способ нарисовать эти вертикальные линии? Как я могу нарисовать эту вертикальную линию?

1 Ответ

0 голосов
/ 06 мая 2018

Индикатор выполнения с разделителем - это хорошее место для поиска, как упомянул @Nilesh Rathod. Вместо использования canvas.drawRect () вы можете использовать canvas.drawRoundRect (); Краткий пример:

for (int i = 0; i < NUM_SEGMENTS; i++) {
        float loLevel = i / (float) NUM_SEGMENTS;
        float hiLevel = (i + 1) / (float) NUM_SEGMENTS;
        if (loLevel <= level && level <= hiLevel) {
            float middle = mSegment.left + NUM_SEGMENTS * segmentWidth * (level - loLevel);
            canvas.drawRoundRect(mSegment.left, mSegment.top, middle, mSegment.bottom, mPaint);
            mPaint.setColor(mBackground);
            canvas.drawRoundRect(middle, mSegment.top, mSegment.right, mSegment.bottom, mPaint);
        } else {
            canvas.drawRoundRect(mSegment, mPaint);
        }
        mSegment.offset(mSegment.width() + gapWidth, 0);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...