2011-09-30 120 views
7

使用Android SeekBar,您通常可以将拇指向左或向右拖动,黄色的进度颜色位于拇指左侧。我想要的是完全相反,基本上翻转拇指右侧的黄色进度颜色并在y轴上翻转整个SeekBar。Android SeekBar水平翻转

任何人都可以指向正确的方向吗?谢谢!

回答

19

摆弄了一些代码后,我得到了它,它似乎工作得很好。希望它能帮助未来的其他人。

public class ReversedSeekBar extends SeekBar { 

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

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

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

    @Override 
    protected void onDraw(Canvas canvas) { 
     float px = this.getWidth()/2.0f; 
     float py = this.getHeight()/2.0f; 

     canvas.scale(-1, 1, px, py); 

     super.onDraw(canvas); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     event.setLocation(this.getWidth() - event.getX(), event.getY()); 

     return super.onTouchEvent(event); 
    } 
} 

这与这两个问题的帮助下一起抛出:

  1. How can you display upside down text with a textview in Android?
  2. How can I get a working vertical SeekBar in Android?
2

你试过seekbar.setRotation(180)?它将搜索栏翻转180度并翻转,这意味着左侧是最大的,右侧是0,拇指右侧的颜色。不需要以这种方式创建自定义搜索栏。

+2

除了SeekBar会在视觉上颠倒的事实。 – mhenry

+0

默认的seekbar在顶部和底部看起来是一样的,所以不确定会有什么区别。至少我没有看到我的测试有任何区别 – DanLBan

+1

您不能假定SeeBark看起来会颠倒,因为OEM能够改变原生SeekBar视图的外观。添加一个简单的渐变将会引起关注。以编程方式覆盖onDraw()和onTouchEvent()事件要好得多,就像我接受的答案一样。 – mhenry