Seekbar avec infobulle android
Salut à tous,
J'essaie de personnaliser android seekbar avec info-bulle, comme l'image donnée. Y at-il un moyen d'ajouter la textview avec le pouce dans seekbar. ou toute autre idée
Merci
Seekbar avec infobulle android
Salut à tous,
J'essaie de personnaliser android seekbar avec info-bulle, comme l'image donnée. Y at-il un moyen d'ajouter la textview avec le pouce dans seekbar. ou toute autre idée
Merci
nous pouvons le faire en obtenant les limites du pouce. et le réglage des x de textview dans le ProgressChanged de seekbar
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mDistance.setText("" + AppConstants.getDistance() + " miles");
//Get the thumb bound and get its left value
int x = mSeekBar.getThumb().getBounds().left;
//set the left value to textview x value
mDistance.setX(x);
}
Il a déjà été demandé. Ils utilisent un TextView pour cela, vous pouvez utiliser un ImageView ou une vue personnalisée pour répondre à votre objectif. Check here.
Voir cet exemple, vous pouvez obtenir une idée de cela,
Quelques optimisations sur Bora (grande) Réponse:
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mDistance.setText("" + AppConstants.getDistance() + " miles");
float x = seekBarX
+ mSeekBar.getThumb().getBounds().left
- toolTipTextView.getWidth()/2
+ seekBarLayoutParams.leftMargin;
mDistance.setX(x);
}
et déclare:
private RelativeLayout.LayoutParams seekBarLayoutParams;
seekBarLayoutParams = (RelativeLayout.LayoutParams) seekbar.getLayoutParams();
//or `LinearLayout` if you're using `LinearLayout`.
private float seekBarX;
int[] location = new int[2];
seekBarX = location[0];
Cela met exactement dans la milieu du pouce, même si votre SeekBar
a une marge.
Cependant, il ne gère pas la position Y
. Pour résoudre ce problème, si votre SeekBar
a un marginTop
, retirez-le et ajoutez simplement marginBottom
à l'élément ci-dessus (en xml).
Le calcul suivant a fonctionné pour moi. Assez simple et logique.
ViewGroup.MarginLayoutParams seekBarParams = (ViewGroup.MarginLayoutParams) seekBar.getLayoutParams();
// Calculate x position
float x = seekBarParams.leftMargin + seekBar.getPaddingLeft() + seekBar.getThumb().getBounds().left - tvValue.getWidth()/2;
tvValue.setX(x);
// Calculate y position
float y = seekBarParams.topMargin + seekBar.getPaddingTop() - tvValue.getHeight();
tvValue.setY(y);
Le niveau d'API requis est de 16 ou plus pour la mise en œuvre de cette méthode! –
Mieux utiliser 'float' –
il a travaillé avec merci beaucoup –