2013-07-01 16 views

risposta

10

Ho affrontato lo stesso problema. Grazie a Commonsware per indicare la giusta direzione. Ho scritto una lezione ispirata a code.google.com/p/range-seek-bar) per ottenere la soluzione.

https://github.com/vashisthg/StartPointSeekBar

+0

Questo! molto bella! Trovo il pollice un po 'troppo grande ma che è regolabile naturalmente, inoltre è stato molto facile cambiare colore a sinistra ea destra. Solo avendo difficoltà con l'impostazione di setNormalizedValue, quando è impostato su -1, inizia completamente a sinistra, quando impostato su 1 inizia completamente a destra. impossibile impostare la soluzione centrata su – CularBytes

+1

: valore compreso tra 0 e 1, dove 0.5 è il centro. – CularBytes

+1

È disponibile per impostare questa barra di ricerca personalizzata come verticale? – filipst

2

Per iniziare nel mezzo, è possibile chiamare setProgress() con un valore che è la metà della vostra gamma totale.

Per fare in modo che SeekBar inizi nel mezzo e terminare (ovvero, la linea blu va da metà a sinistra o da metà a destra), è necessario creare il proprio sostituto per SeekBar o trovare qualcun altro che ha fatto questo, in quanto questo non è supportato da SeekBar stesso.

+0

'proprio sostituto per SeekBa Sei, per favore? – lysenkobv

+0

@lysenkobv: No, intendo una classe Java. 'SeekBar', come il' ProgressBar' da cui eredita, è progettato per mettere il punto di partenza della barra sul lato sinistro. Sarò piuttosto sorpreso se questo può essere cambiato tramite uno stile. Mi aspetto che tu debba creare il tuo 'View' che gestisca questo. Ad esempio, 'RangeSeekBar' (https://code.google.com/p/range-seek-bar/) è stato implementato come sottoclasse di' ImageView', per gestire il caso in cui si desidera due pollici anziché uno. – CommonsWare

4

customSeekBar

Come Soprattutto Detto questo, si può ottenere la mia implementazione nostra SeekBar personalizzato.

Ho provato nel modo seguente e ha funzionato per me.

activity_main.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" 
    android:layout_margin="20dp"> 

<com.example.customseekbar.CustomSeekBar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"   
    android:max="100" 
    android:progress="50" 
    android:progressDrawable="@android:color/transparent" 
    android:id="@+id/customSeekBar" 
/> 

</RelativeLayout> 

MainActivity.java

package com.example.customseekbar; 

import com.example.suricustomseekbar.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.SeekBar; 

public class MainActivity extends Activity { 

SeekBar mseekBar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mseekBar = (SeekBar) findViewById(R.id.customSeekBar); 
    mseekBar.setProgress(50); 
    } 
    } 

CustomSeekBar.java

package com.example.customseekbar; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.util.AttributeSet; 
import android.widget.SeekBar; 

    public class CustomSeekBar extends SeekBar { 

private Rect rect; 
private Paint paint ; 
private int seekbar_height; 

public CustomSeekBar(Context context) { 
    super(context); 

} 

public CustomSeekBar(Context context, AttributeSet attrs) { 

    super(context, attrs); 
    rect = new Rect(); 
    paint = new Paint(); 
    seekbar_height = 6; 
} 

public CustomSeekBar(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected synchronized void onDraw(Canvas canvas) { 

    rect.set(0 + getThumbOffset(), 
      (getHeight()/2) - (seekbar_height/2), 
      getWidth()- getThumbOffset(), 
      (getHeight()/2) + (seekbar_height/2)); 

    paint.setColor(Color.GRAY); 

    canvas.drawRect(rect, paint); 



    if (this.getProgress() > 50) { 


     rect.set(getWidth()/2, 
       (getHeight()/2) - (seekbar_height/2), 
       getWidth()/2 + (getWidth()/100) * (getProgress() - 50), 
       getHeight()/2 + (seekbar_height/2)); 

     paint.setColor(Color.CYAN); 
     canvas.drawRect(rect, paint); 

    } 

    if (this.getProgress() < 50) { 

     rect.set(getWidth()/2 - ((getWidth()/100) * (50 - getProgress())), 
       (getHeight()/2) - (seekbar_height/2), 
       getWidth()/2, 
       getHeight()/2 + (seekbar_height/2)); 

     paint.setColor(Color.CYAN); 
     canvas.drawRect(rect, paint); 

    } 

    super.onDraw(canvas); 
    } 
} 
Problemi correlati