2013-07-01 11 views

Odpowiedz

10

Zmierzyłem się z tym samym problemem. Dzięki Commonsware wskazać właściwy kierunek. Napisałem klasę zainspirowaną przez code.google.com/p/range-seek-bar), aby uzyskać rozwiązanie.

https://github.com/vashisthg/StartPointSeekBar

+0

To! bardzo dobrze! Uważam, że kciuk jest trochę duży, ale można go oczywiście regulować, a także bardzo łatwo zmienić kolor na lewy i prawy. Tylko mając trudności z ustawieniem setNormalizedValue, gdy jest ustawiona na -1, zaczyna się całkowicie po lewej stronie, po ustawieniu na 1 zaczyna się całkowicie po prawej stronie. nie można go ustawić w celu ustawienia wyśrodkowanego rozwiązania – CularBytes

+1

: wartość między 0 a 1, gdzie 0,5 to środek. – CularBytes

+1

Czy można ustawić pionowy niestandardowy pasek wyszukiwania? – filipst

2

rozpocząć się w środku, można zadzwonić setProgress() o wartości, która jest połowa całkowitego zakresu.

Aby rozpocząć SeekBar w środku i przejść do końca (tj. Niebieska linia biegnie od środka do lewej lub od środka do prawej), należy utworzyć własny zamiennik dla SeekBar lub znaleźć ktoś inny, który to zrobił, ponieważ nie jest to obsługiwane przez samą siebie.

+0

'własny zamiennik SeekBa r', ty meen 'style'? – lysenkobv

+0

@lysenkobv: Nie, chodzi mi o klasę Java. "SeekBar", podobnie jak "ProgressBar", z którego pochodzi, jest przeznaczony do umieszczenia punktu początkowego paska na lewej krawędzi. Będę raczej zaskoczony, jeśli da się to zmienić za pomocą stylu. Spodziewam się, że będziesz musiał stworzyć swój własny "widok", który sobie z tym poradzi. Na przykład 'RangeSeekBar' (https://code.google.com/p/range-seek-bar/) został zaimplementowany jako podklasa' ImageView', aby obsłużyć przypadek, w którym chcesz dwa kciuki zamiast jednego. – CommonsWare

4

customSeekBar

Jak Przede wszystkim powiedział, może to zostać osiągnięte mój wdrażania własną niestandardową SeekBar.

Próbowałem w następujący sposób i zadziałało to dla mnie.

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); 
    } 
} 
Powiązane problemy