使用Android SeekBar,您通常可以将拇指向左或向右拖动,黄色进度颜色位于拇指左侧。我希望完全相反,基本上将黄色进度颜色翻转到拇指右侧,并将整个SeekBar翻转到y轴上。
有人能指出我正确的方向吗?谢谢!
答案 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 :(得分: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
}
}