2013-07-01 58 views

回答

10

我面臨同樣的問題。感謝Commonsware指出正確的方向。我寫了一個受code.google.com/p/range-seek-bar啓發的課程)來獲得解決方案。

https://github.com/vashisthg/StartPointSeekBar

+0

這個!非常好!我發現拇指有點大,但這是可以調整的,也很容易改變顏色的左側和右側。 setNormalizedValue設置爲-1時,遇到困難時,它始終始終在左側,當設置爲1時,它始終在右側開始。無法將其設置爲居中 – CularBytes

+1

解決方案:值介於0和1之間,其中以0.5爲中心。 – CularBytes

+1

是否可以將此自定義搜索欄設置爲垂直? – filipst

2

要在中間開始,你可以調用setProgress()與那就是你的總範圍的一半的值。

要讓SeekBar在中間開始並結束(即,藍線從中間向左或從中間向右),您需要創建自己的替代品SeekBar,或查找別人誰做了這個,因爲這不支持SeekBar本身。

+0

'自己更換SeekBa r',你是不是'風格'? – lysenkobv

+0

@lysenkobv:不,我的意思是一個Java類。 'SeekBar',就像繼承它的'ProgressBar'一樣,被設計爲將條的起點放在左邊。如果可以通過風格改變,我會感到很驚訝。我期望你將需要創建你自己的'View'來處理這個問題。例如,'RangeSeekBar'(https://code.google.com/p/range-seek-bar/)是作爲'ImageView'的子類實現的,用於處理需要兩個拇指而不是一個的情況。 – CommonsWare

4

customSeekBar

正如上面所說的所有,可以實現我實現自己的自定義搜索條。

我嘗試了以下方法,它爲我工作。

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