2016-05-14 12 views
0

私はカスタムVertical Seekbarを使用しています。カスタムVertical SeekBarを使用すると、サムのハイライトがバーで回転しません。

enter image description here

私は上下左右シークバーをスクロールすると、親指のハイライトは、シークバーがまだ水平であるかのように、画面上部の左右にスクロールし続けます。次のように私のカスタム垂直シークバーがある:

public class VerticalSeekBar extends SeekBar { 

protected OnSeekBarChangeListener changeListener; 

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

@Override 
public synchronized void setProgress(int progress) { 
    super.setProgress(progress); 
    onSizeChanged(getWidth(), getHeight(), 0, 0); 
} 

@Override public void setOnSeekBarChangeListener(OnSeekBarChangeListener mListener) 
{ 
    this.changeListener = mListener; 
} 

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: 
      setProgress(getMax() - (int) (getMax() * event.getY()/getHeight())); 
      if (changeListener != null) 
       changeListener.onStartTrackingTouch(this); 
      setSelected(true); 
      setPressed(true); 
      break; 
     case MotionEvent.ACTION_UP: 
      if (changeListener != null) 
       changeListener.onStopTrackingTouch(this); 
      setSelected(false); 
      setPressed(false); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      int i=getMax() - (int) (getMax() * event.getY()/getHeight()); 
      setProgress(i); 
      onSizeChanged(getWidth(), getHeight(), 0, 0); 
      if (changeListener != null) 
       changeListener.onProgressChanged(this, i, true); 
      setPressed(true); 
      setSelected(true); 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
    } 
    return true; 
} 

} 

私は

setSelected(true); 
setPressed(true); 

を除去することによって、完全にハイライトを排除することができます。しかし、理想的に、私は、標準のデザインパターンを維持し、親指があるハイライトのフォローを持っていると思います。ハイライトの位置と位置にアクセスするには、とにかくそれを回転させることができるのですか?

答えて

1

私は、同じ質問を持っていた答えを、この同様の記事に出くわした:nullに背景を設定 Android SeekBar custom rectangle thumb visual bug

。私は "setBackground(null);"を追加しました。拡張されたSeekBarクラスのコンストラクタに渡しますが、提案されている解決策は、 "SeekBar"セクションのactivity.xmlファイルでこれを行います。

+0

これは、サムのハイライトを完全に排除しようとしているが、デザインパターンをアンドロイドのデフォルトに保つようにサムのハイライトを維持することが必要な場合に有効です。ハイライトは水平面にとどまり、現在の垂直シークバーとは別のものです。私は唯一の解決策は、同様にカスタムの親指のハイライトを作成し、それが標準に一致することだと思います – The4thIceman

関連する問題