Android SeekBar水平翻转

时间:2011-09-30 23:58:08

标签: android seekbar

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

有人能指出我正确的方向吗?谢谢!

5 个答案:

答案 0 :(得分:20)

在摆弄一些代码后,这就是我得到的东西,它看起来效果很好。希望将来可以帮助其他人。

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?

答案 1 :(得分:3)

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

答案 2 :(得分:1)

You should look into making a custom progress bar.考虑​​到您想要做什么,您已经拥有了Android SDK中所需的图片。我会提取它们并相应地编辑它们。 Here's a tutorial to help get you started

答案 3 :(得分:0)

您是否尝试过在xml中设置

            android:rotationY="180"

答案 4 :(得分:-1)

这应该解决@mhenry答案的一些问题

class ReverseSeekBar : SeekBar {
    constructor(context: Context) : super(context) {
        init()
    }
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
        init()
    }
    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
        init()
    }

    var first = true

    override fun onTouchEvent(event: MotionEvent): Boolean {
        event.setLocation(this.width - event.x, event.y)
        return super.onTouchEvent(event)
    }

    override fun getProgress(): Int {
        return max - super.getProgress() + min
    }

    override fun setProgress(progress: Int) {
        super.setProgress(max - progress + min)
    }

    override fun onDraw(canvas: Canvas?) {
        if (first) {
            first = false
            val old = progress
            progress = min + max - progress
            super.onDraw(canvas)
            progress = old
        } else
            super.onDraw(canvas)
    }

    private fun init() {
        rotation = 180f
    }

}