2012-12-04 47 views
0

enter image description here package android.widget;垂直seekbar行爲異常

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 

public class VerticalSeekBar extends SeekBar { 

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

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

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

    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(h, w, oldh, oldw); 
    } 

    @Override 
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
     setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
    } 

    protected void onDraw(Canvas c) { 
     c.rotate(-90); 
     c.translate(-getHeight(), 0); 

     super.onDraw(c); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (!isEnabled()) { 
      return false; 
     } 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
      case MotionEvent.ACTION_UP: 
       setProgress(getMax() - (int) (getMax() * event.getY()/getHeight())); 
       onSizeChanged(getWidth(), getHeight(), 0, 0); 
       break; 

      case MotionEvent.ACTION_CANCEL: 
       break; 
     } 
     return true; 
    } 
} 

我使用上面的代碼自定義了我的搜索欄。我的搜索欄的大拇指顯示爲倒置。即拇指行爲正好在反方向,因爲它應該表現正常。當我的列表視圖處於開始狀態時,拇指位於搜索欄的最後位置,反之亦然。幫幫我!!!!!!!

enter image description here

+0

你可以發佈它的行爲的樣本截圖? –

+0

拇指應該在頂部..但它顯示在底部..和隨着列表視圖向下滾動拇指向上..這只是相反的行爲....... –

回答

1

我創建了來自同一代碼反向搜索條的實施。雖然這適用於垂直尋找酒吧,但我只是嘗試了一種倒置的方式,這對您的情況應該很有幫助。我已經將我的項目添加到github,這裏是它的鏈接。

https://github.com/AndroSelva/Vertical-SeekBar-Android

protected void onDraw(Canvas c) { 
     c.rotate(90); 
     c.translate(0, -getWidth()); 

     super.onDraw(c); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (!isEnabled()) { 
      return false; 
     } 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
      case MotionEvent.ACTION_UP: 
       int i=0; 
       i=getMax() - (int) (getMax() * event.getY()/getHeight()); 
       setProgress(100-i); 
       Log.i("Progress",getProgress()+""); 
       onSizeChanged(getWidth(), getHeight(), 0, 0); 
       break; 

      case MotionEvent.ACTION_CANCEL: 
       break; 
     } 
     return true; 
    } 
+1

謝謝..謝謝我非常喜歡。 我改變了: c.rotate(90); c.translate(0,-getWidth()); 這有助於。 –

+0

我真的很高興它幫助你。並感謝您接受答案。 –