【问题标题】:Using a custom Vertical SeekBar, thumb highlight does not rotate with the bar使用自定义 Vertical SeekBar,拇指高亮不随栏旋转
【发布时间】:2016-05-14 21:19:15
【问题描述】:

我正在使用自定义的垂直搜索栏,一切都很好,除了拇指突出显示。

当我向上和向下滚动左侧搜索栏时,拇指突出显示继续在屏幕顶部从左到右滚动,就好像搜索栏仍然是水平的一样。我的自定义垂直搜索栏如下:

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

但理想情况下,我希望保持标准设计模式,并让突出显示跟随拇指所在的位置。无论如何可以访问突出显示的位置和位置,以便我也可以旋转它?

【问题讨论】:

    标签: android seekbar


    【解决方案1】:

    我有同样的问题,并遇到了类似的帖子以寻求答案: Android SeekBar custom rectangle thumb visual bug

    将背景设置为空。我添加了“setBackground(null);”到我的扩展 SeekBar 类的构造函数,但建议的解决方案在“SeekBar”部分下的 activity.xml 文件中执行此操作。

    【讨论】:

    • 如果你想完全消除拇指高亮,这可以工作,但我想要的是保持拇指高亮,以保持设计模式符合 android 默认值,问题是高亮仍然存在在水平面上,与现在垂直的搜索栏分开。我想唯一的解决方案是创建自定义拇指高亮并使其符合标准
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多