Android搜索栏拇指定制

时间:2017-02-12 14:31:07

标签: android android-custom-view seekbar

我正在尝试创建一个搜索栏。它必须如下图所示。

enter image description here

这是布局中的搜索栏:

import numpy as np
import pandas as pd
from pandas import DataFrame
from pandas import Series
pd.set_option('display.max_columns', None)
df = pd.read_csv('Medicare.txt', 'r', sep='\t', na_values=['.'])
print (len(df))
df.head(10)

这是progressbar_thumb drawable XML:

TypeError: parser_f() got multiple values for argument 'sep'

拇指有两个不同的图像,一个垂直线和一个圆形旋钮。我的问题是如何在Android搜索栏中使用这样的拇指。如果我将拇指设置为XML,则将拇指宽度视为圆形旋钮的宽度。因此,如下图所示,它会在拇指和进度之间留出一些空间。我可以自定义视图以显示完整的拇指,但如何删除拇指周围的额外空间?

enter image description here

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。 我觉得非常有用this code

您只需要更改onDraw(Canvas canvas)

中文字的绘制位置

希望这可以提供帮助。

编辑1:

这是我的代码,将标签的进展百分比放在seekbar拇指下。您只需更改label_xlabel_yonDraw(Canvas canvas)的值即可更改标注的位置。

public class SeekBarWithHint extends android.support.v7.widget.AppCompatSeekBar {
private final int MIN_PROGRESS_VALUE = 0;
private final int MAX_PROGRESS_VALUE = 100;

private Paint mSeekBarHintPaint;
private int mHintTextColor;
private float mHintTextSize;

public SeekBarWithHint(Context context) {
    super(context);
    init();
}

public SeekBarWithHint(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray a = context.getTheme().obtainStyledAttributes(
            attrs,
            R.styleable.SeekBarWithHint,
            0, 0);

    try {
        mHintTextColor = a.getColor(R.styleable.SeekBarWithHint_hint_text_color, 0);
        mHintTextSize = a.getDimension(R.styleable.SeekBarWithHint_hint_text_size, 0);
    } finally {
        a.recycle();
    }

    init();
}

public SeekBarWithHint(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init() {
    setMax(MAX_PROGRESS_VALUE);
    mSeekBarHintPaint = new TextPaint();
    mSeekBarHintPaint.setColor(mHintTextColor);
    mSeekBarHintPaint.setTextSize(mHintTextSize);
}

@Override
protected synchronized void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    int label_x = (int) (getThumb().getBounds().centerX());
    int label_y = getHeight();
    canvas.drawText(String.valueOf(getProgress()) + "%", getProgress() > 95 ? label_x - 55 : label_x, label_y, mSeekBarHintPaint);
}

private void animateProgression(int progress) {
    final ObjectAnimator animation = ObjectAnimator.ofInt(this, "progress", MIN_PROGRESS_VALUE, progress);
    animation.setDuration(3000);
    animation.setInterpolator(new DecelerateInterpolator());
    animation.start();
    this.setProgress(progress);
    this.clearAnimation();
}

public void setSeekbarProgress(int progress) {
    animateProgression(progress);
}
}

编辑2:

最好使用完全符合您要求的DescreteSeekBar