web-dev-qa-db-ja.com

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>

次のような出力があります::

enter image description here

次の図のように、シークバーで初期値と最終値を取得するためにコードを変更する方法

enter image description here

ありがとう!

12
Devrath

シークバーの最大値は既に定義されています

Android:max="100"

ここで、シークバーの左右に2つのテキストビューを追加する必要があります。 相対レイアウトを使用し、textviews Left and Rightの両方を親に揃えます。

7
Jitender Dev

Brontokヒントは私の問題を解決しました...私も答えを共有したいです... 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>
3
Devrath

まず、SeekBarを拡張する必要があると思います。
次に、canvas.drawText()メソッドでonDraw()を呼び出して、SeekBarの前とSeekBarの後にテキストを描画します。

この方法で、textViewメソッドコールバックでonDrawを更新できます

1
yftx

onSeekBarChangeListenerで作成されたメソッドを実装し、設定しました

public class Filters extends Activity implements OnSeekBarChangeListener{

 PRICEbar.setOnSeekBarChangeListener(this); 

次の行は、新しいOnSeekBarChangeListenerでオーバーライドします

 PRICEbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

onSeekBarChangeListenerとこれら3つの空のメソッドをアクティビティから削除できます(onSeekBarChange、onStartTracking、onStopTracking)

1