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