2012-10-11 77 views
1

我用this link來實現SeekBar與兩個大拇指我得到了輸出。使用SeekBar與兩個大拇指

但這個搜索條有一個問題,它允許拇指1拇指交叉2即它可以讓拇指1的值是比不應該被允許按我的要求拇指2值。

爲了達到這個目的,應該怎樣修改下面的代碼?

public class SeekBarWithTwoThumb extends ImageView { 

    private String TAG = this.getClass().getSimpleName(); 
    private Bitmap thumb = BitmapFactory.decodeResource(getResources(), 
      R.drawable.leftthumb); 
    private int thumb1X, thumb2X; 
    private int thumb1Value, thumb2Value; 
    private int thumbY; 
    private Paint paint = new Paint(); 
    private int selectedThumb; 
    private int thumbHalfWidth; 
    private SeekBarChangeListener scl; 


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

    public SeekBarWithTwoThumb(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public SeekBarWithTwoThumb(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     if (getHeight() > 0) 
      init(); 
    } 

    private void init() { 
     printLog("View Height =" + getHeight() + "\t\t Thumb Height :" 
       + thumb.getHeight()); 
     if (thumb.getHeight() > getHeight()) 
      getLayoutParams().height = thumb.getHeight(); 

     thumbY = (getHeight()/2) - (thumb.getHeight()/2); 
     printLog("View Height =" + getHeight() + "\t\t Thumb Height :" 
       + thumb.getHeight() + "\t\t" + thumbY); 

     thumbHalfWidth = thumb.getWidth()/2; 
     thumb1X = thumbHalfWidth; 
     thumb2X = getWidth()/2 ; 
     invalidate(); 
    } 
    public void setSeekBarChangeListener(SeekBarChangeListener scl){ 
     this.scl = scl; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(thumb, thumb1X - thumbHalfWidth, thumbY, 
       paint); 
     canvas.drawBitmap(thumb, thumb2X - thumbHalfWidth, thumbY, 
       paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     int mx = (int) event.getX(); 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (mx >= thumb1X - thumbHalfWidth 
        && mx <= thumb1X + thumbHalfWidth) { 
       selectedThumb = 1; 
       printLog("Select Thumb 1"); 
      } else if (mx >= thumb2X - thumbHalfWidth 
        && mx <= thumb2X + thumbHalfWidth) { 
       selectedThumb = 2; 
       printLog("Select Thumb 2"); 
      } 
      break; 
     case MotionEvent.ACTION_MOVE: 
      printLog("Mouse Move : " + selectedThumb); 

      if (selectedThumb == 1) { 
       thumb1X = mx; 
       printLog("Move Thumb 1"); 
      } else if (selectedThumb == 2) { 
       thumb2X = mx; 
       printLog("Move Thumb 2"); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      selectedThumb = 0; 
      break; 
     } 

     if(thumb1X < 0) 
      thumb1X = 0; 

     if(thumb2X < 0) 
      thumb2X = 0; 

     if(thumb1X > getWidth()) 
      thumb1X =getWidth() ; 

     if(thumb2X > getWidth()) 
      thumb2X =getWidth() ; 

     invalidate(); 
     if(scl !=null){ 
      calculateThumbValue(); 
      scl.SeekBarValueChanged(thumb1Value,thumb2Value); 
     } 
     return true; 
    } 

    private void calculateThumbValue(){ 
     thumb1Value = (100*(thumb1X))/(getWidth()); 
     thumb2Value = (100*(thumb2X))/(getWidth()); 
    } 
    private void printLog(String log){ 
     Log.i(TAG, log); 
    } 

    interface SeekBarChangeListener{ 
     void SeekBarValueChanged(int Thumb1Value,int Thumb2Value); 
    } 


} 

任何幫助表示讚賞。

回答

1

OnTouch事件結束時,用下面的代碼替換您的代碼。希望它有幫助

calculateThumbValue(); 

    if(thumb1Value < thumb2Value) { 
     invalidate(); 
     if(scl != null){ 
      scl.SeekBarValueChanged(thumb1Value, thumb2Value); 
     } 
    } 
+0

它的工作,但應用程序在幾秒鐘後進入ANR模式...任何想法爲什麼? – GAMA

+0

logcat中的任何錯誤? – Braj

+0

沒有。應用程序只是沒有迴應... – GAMA