private void draw(Canvas canvas, Paint paint, int thumbColor, int colorLeft, int colorRight, float halfLeft, float halfRight) {
        Rect bounds = getBounds();
        int thumbX = mPoint.x;
        int thumbY = mPoint.y;
        int startLeft = bounds.left + mTouchRadius;
        int startRight = bounds.right - mTouchRadius;

        // Track
        if (halfLeft > 0) {
            paint.setColor(colorLeft);
            canvas.drawRect(startLeft, thumbY - halfLeft, thumbX, thumbY + halfLeft, paint);
        }

        // Scrubber
        if (halfRight > 0) {
            paint.setColor(colorRight);
            canvas.drawRect(thumbX, thumbY - halfRight, startRight, thumbY + halfRight, paint);
        }

        // Ticks Right
        if (mTickRadius > halfRight) {
            for (int i = 0; i <= mNumSegments; i++) {
                float x = startRight - i * mTickDistance;
                if (x <= thumbX)
                    break;
                canvas.drawCircle(x, thumbY, mTickRadius, paint);
            }
        }

        // Ticks Left
        if (mTickRadius > halfLeft) {
            paint.setColor(colorLeft);
            for (int i = 0; i <= mNumSegments; i++) {
                float x = i * mTickDistance + startLeft;
                if (x > thumbX)
                    break;
                canvas.drawCircle(x, thumbY, mTickRadius, paint);
            }
        }

        // Thumb
        if (!isOpen && mThumbRadius > 0) {
            paint.setColor(thumbColor);
            canvas.drawCircle(thumbX, thumbY, mThumbRadius, paint);
        }
    }
<h1>SeekBarDrawable</h1>
<p>
Special {@link SeekBarStateDrawable} implementation
To draw the Track, Scrubber and Thumb circle.
</p>
<p>
It's special because it will stop drawing once the state is pressed/focused BUT only after a small delay.
</p>
<p>
This special delay is meant to help avoiding frame glitches while the {@link BalloonMarkerDrawable} is added to the Window
</p>

@hide
caprice/ui/src/main/java/net/qiujuer/genius/ui/drawable/SeekBarDrawable.java