1

私の顧客は、このように見えるシークバーを望んでいます: ここにリンクの説明を入力してください 私はすでに進行状況、二次進行状況、およびつまみを希望どおりにスタイル設定しましたが、進行状況にドットを適用する方法がわかりません。ドローアブルでそれが可能であることを願っています。パディングなどで5つの画像を適用する必要はありません。

前もって感謝します。

4

1 に答える 1

5

最後にこれを解決しました。たぶん、他の誰かがこれを必要とするかもしれません。元のクラスを継承し、onDraw を変更しました。

public class SeverityBar extends SeekBar {
private Paint selected, unselected;
private int halfSize = 15;
private RectF position;

public SeverityBar(Context context) {
    super(context);
    selected = new Paint(Paint.ANTI_ALIAS_FLAG);
    selected.setColor(getContext().getResources().getColor(R.color.TextColor));
    selected.setStyle(Style.FILL);
    unselected = new Paint(Paint.ANTI_ALIAS_FLAG);
    unselected.setColor(getContext().getResources().getColor(android.R.color.darker_gray));
    selected.setStyle(Style.FILL);
    position = new RectF();
}

@Override
protected synchronized void onDraw(Canvas canvas) {
    int paddingLeft = getPaddingLeft();
    int paddingTop = getPaddingTop();
    float margin = (canvas.getWidth()-(paddingLeft+getPaddingRight()))/4;
    float halfHeight = (canvas.getHeight()+paddingTop)*.5f;
    for (int i = 0; i < 5; i++) {
        position.set(
                paddingLeft+(i*margin)-halfSize, 
                halfHeight-halfSize, 
                paddingLeft+(i*margin)+halfSize,
                halfHeight+halfSize);
        canvas.drawOval(position, (i<getProgress())?selected:unselected);
    }
    super.onDraw(canvas);
}

public int getDotsSize() {
    return halfSize*2;
}

public void setDotsSize(int dotsSize) {
    this.halfSize = dotsSize/2;
}

}

for query と margin の値は、進行状況の最小/最大値に従って変更する必要があります。

于 2013-06-07T10:08:13.273 に答える