0

写真:

ここに画像の説明を入力してください

写真のような特定のシークバーをカスタマイズするにはどうすればよいですか?

重要なのは:

  1. 指がシークバー上を移動しているときに、進行状況を示す中断されたビューを表示する方法。

  2. シークバーの親ビューと同じレベルのレイヤーがいくつかあります。これらのビューはシークバーの近くにあります。これらのビューは中断されたビューと重なっていますか?

4

1 に答える 1

0

この答えを見てください:13887556

それは良い出発点かもしれません。SeekBarを拡張し、onMeasure()およびonDrawメソッド()をオーバーライドしてみてください。

@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
 {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    if (labelBackground != null)
    {

        viewWidth = getMeasuredWidth();
        barHeight = getMeasuredHeight();// returns only the bar height (without the label);
        setMeasuredDimension(viewWidth, barHeight + labelBackground.getHeight());
    }

}



@Override
protected synchronized void onDraw(Canvas canvas)
{
    if (labelBackground != null)
    {
        barBounds.left = getPaddingLeft();
        barBounds.top = labelBackground.getHeight() + getPaddingTop();
        barBounds.right = barBounds.left + viewWidth - getPaddingRight() - getPaddingLeft();
        barBounds.bottom = barBounds.top + barHeight - getPaddingBottom() - getPaddingTop();

        progressPosX = barBounds.left + ((float) this.getProgress() / (float) this.getMax()) * barBounds.width();

        labelPos.x = (int) progressPosX - labelOffset;
        labelPos.y = getPaddingTop();

        progressDrawable = getProgressDrawable();
        progressDrawable.setBounds(barBounds.left, barBounds.top, barBounds.right, barBounds.bottom);
        progressDrawable.draw(canvas);

        labelTextPaint.getTextBounds(labelText, 0, labelText.length(), labelTextRect);

        canvas.drawBitmap(labelBackground, labelPos.x, labelPos.y, labelBackgroundPaint);
        canvas.drawText(labelText, labelPos.x + labelBackground.getWidth() / 2 - labelTextRect.width() / 2, labelPos.y + labelBackground.getHeight() / 2 + labelTextRect.height() / 2, labelTextPaint);

        thumbX = (int) progressPosX - getThumbOffset();
        thumbDrawable.setBounds(thumbX, barBounds.top, thumbX + thumbDrawable.getIntrinsicWidth(), barBounds.top + thumbDrawable.getIntrinsicHeight());
        thumbDrawable.draw(canvas);
    } else
    {
        super.onDraw(canvas);
    }
于 2012-12-28T20:11:33.667 に答える