web-dev-qa-db-fra.com

Implémentation de Simple SeekBar dans android

Filters.Java

public class Filters extends Activity implements OnSeekBarChangeListener{
    private SeekBar PRICEbar,DISTANCEbar, RATINGbar; // declare seekbar object variable
    // declare text label objects
    private TextView PRICEtextProgress,DISTANCEtextProgress, RATINGtextProgress;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // load the layout
        setContentView(R.layout.filters);     
        PRICEbar = (SeekBar)findViewById(R.id.PRICEseekBarID); // make seekbar object
        PRICEbar.setOnSeekBarChangeListener(this); 
        PRICEbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub
                PRICEtextProgress = (TextView)findViewById(R.id.PRICEtextViewProgressID);
                PRICEtextProgress.setText("Price:: Rs "+progress);

            }
        });

}
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (seekBar == PRICEbar)
            PRICEtextProgress.setText("Price:: Rs "+progress);
    }
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }



}

filters.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <RelativeLayout
        Android:id="@+id/relativeLayoutforPRICE"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" >

        <TextView
            Android:id="@+id/PRICEtextViewProgressID"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentTop="true"
            Android:text="Price"
            Android:textAppearance="?android:attr/textAppearanceLarge" >
        </TextView>

        <SeekBar
            Android:id="@+id/PRICEseekBarID"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_below="@+id/textView1"
            Android:layout_marginTop="26dp"            
            Android:max="100" >
        </SeekBar>
    </RelativeLayout>
</LinearLayout>

J'ai une sortie comme ça ::

enter image description here

Comment modifier mon code pour obtenir les valeurs initiales et finales dans la barre de recherche comme dans la figure ci-dessous

enter image description here

Merci!

13
Devrath

Vous avez déjà défini la valeur maximale de la barre de recherche

Android:max="100"

Vous devez maintenant ajouter deux vues de texte à gauche et à droite de la barre de recherche. Utilisez Disposition relative et alignez les deux vues de texte gauche et droite sur le parent.

8
Jitender Dev

Brontok un indice a résolu mon problème ... Je veux aussi partager la réponse ... Il suffit de modifier le xml


<RelativeLayout
        Android:id="@+id/relativeLayoutforPRICE"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" >

        <TextView
            Android:id="@+id/PRICEtextViewProgressID"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentTop="true"
            Android:text="Price"
            Android:textAppearance="?android:attr/textAppearanceLarge" >
        </TextView>

        <SeekBar
            Android:id="@+id/PRICEseekBarID"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_below="@+id/textView1"
            Android:layout_marginTop="26dp"
            Android:max="100" >
        </SeekBar>

        <TextView
            Android:id="@+id/PRICEinitialvaluetextID"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/PRICEseekBarID"
            Android:text="Rs 0" >
        </TextView>

        <TextView
            Android:id="@+id/PRICEinitialvaluetextID"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_below="@+id/PRICEseekBarID"
            Android:text="Rs 100" />
    </RelativeLayout>
5
Devrath

Tout d'abord, je pense que vous devriez étendre SeekBar.
Deuxièmement, appelez canvas.drawText() dans onDraw() pour dessiner du texte avant SeekBar et après SeekBar.

De cette façon, vous pouvez actualiser le textView dans votre rappel de méthode onDraw

1
yftx

check it out, vous avez implémenté les méthodes créées par OnSeekBarChangeListener et défini

public class Filters extends Activity implements OnSeekBarChangeListener{

 PRICEbar.setOnSeekBarChangeListener(this); 

et la ligne suivante, vous la remplacez par la nouvelle OnSeekBarChangeListener

 PRICEbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

vous pouvez supprimer les implémentations OnSeekBarChangeListener et ces 3 méthodes vides de votre activité (onSeekBarChange, onStartTracking, onStopTracking)

1
Paweł Łęgowski