2013-10-16 8 views
1

enter image description hereSeekbar 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

Répondre

11

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); 
} 
+1

Le niveau d'API requis est de 16 ou plus pour la mise en œuvre de cette méthode! –

+0

Mieux utiliser 'float' –

+0

il a travaillé avec merci beaucoup –

0

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.

2

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).

0

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);