Je veux créer un SeekBar personnalisé avec le texte suivant qui met à jour sa position (et la progression) en fonction de l'endroit où le pouce est positionné.Android - Seekbar avec le texte suivant
Que dois-je obtenir:
Hypothèses:
- Valeur min = 1000
- Valeur max = 30000
Cas 1: La progression est sur 0% (ou valeur min = 1000) et le texte doit être aligné sur la bordure gauche du pouce.
Cas 2: Le texte de progression est affiché au-dessus du pouce et est centré car il a suffisamment d'espace pour se dessiner.
Cas 3: La progression est sur 100% (ou la valeur max = 3000) et le texte doit être aligné sur la bordure droite du pouce.
Que dois-je déjà:
public class CustomSeekBar extends SeekBar {
private Paint paint;
private int[] coordCenterTemp = new int[]{0, 0};
// .....
private void init() {
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setTextSize(sp2px(20));
paint.setTextAlign(Paint.Align.CENTER);
}
private int sp2px(int sp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, getResources().getDisplayMetrics());
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
String str = String.valueOf(getProgress());
int thumb_x = (int) (((double)this.getProgress()/this.getMax()) * (double)(this.getWidth()));
int thumb_y = 30;
int textMeasure = (int) paint.measureText(str, 0, str.length());
if ((textMeasure/2) + thumb_x <= getRight()) {
coordCenterTemp[0] = thumb_x;
coordCenterTemp[1] = thumb_y;
}
canvas.drawText(str, coordCenterTemp[0], coordCenterTemp[1], paint);
}
}
Cela fonctionne lorsque la progression est de 50%. Dès que je glisse vers la droite ou vers la gauche, le texte est peint avec un certain décalage dans la mauvaise direction.
Comment puis-je accomplir ceci?
il a besoin de quelques réglages, mais cela est un excellent exemple comment le faire! Merci! – Bugdr0id