背景
在使用IndicatorSeekbar的时候,发现它不能根据刻度值,实现自定义的文本,因此改动了一下源码.类似的需求如下:
实现方式
1.首先我们需要将IndicatorSeekbar源码fork下来
2.增加一个OnIndicatorTextChangeListener类,来监听Indicator文本的设置
public interface OnIndicatorTextChangeListener {
/**
* 增加一个可以格式化指示器的方法。用于在显示指示器的时候可以自定义显示自己想要的文字
* @param value 格式化之前的值
* @param indicatorView 指示器的view
* @param thumbPosition 滑动器的进度位置
*/
String onIndicatorTextChange(String value,View indicatorView, int thumbPosition);
}
3.在Indicator.java中增加一个mOnIndicatorTextChangeListener成员变量和一个设置监听方法.
OnIndicatorTextChangeListener mOnIndicatorTextChangeListener;
public void setIndicatorTextFormatListener(OnIndicatorTextChangeListener indicatorTextFormatListener){
mOnIndicatorTextChangeListener = indicatorTextFormatListener;
}
4.修改setProgressTextView方法和refreshProgressText方法,以设置文本监听转换后的返回值
public void setProgressTextView(String text) {
/*****************插入代码部分*********************************/
if(null != mOnIndicatorTextChangeListener){
text = mOnIndicatorTextChangeListener.onIndicatorTextChange(text,mIndicatorView,mSeekBar.getProgress());
}
/*****************插入代码部分*********************************/
if (mIndicatorView instanceof CircleBubbleView) {
((CircleBubbleView) mIndicatorView).setProgress(text);
} else if (mProgressTextView != null) {
mProgressTextView.setText(text);
}
}
void refreshProgressText() {
String tickTextString = mSeekBar.getIndicatorTextString();
/*****************插入代码部分*********************************/
if(null != mOnIndicatorTextChangeListener){
tickTextString = mOnIndicatorTextChangeListener.onIndicatorTextChange(tickTextString,mIndicatorView,mSeekBar.getProgress());
}
/*****************插入代码部分*********************************/
if (mIndicatorView instanceof CircleBubbleView) {
((CircleBubbleView) mIndicatorView).setProgress(tickTextString);
} else if (mProgressTextView != null) {
mProgressTextView.setText(tickTextString);
}
}
4.使用方式
接下来我们在自己的代码里,设置一下indicator的文本转换监听即可.
seekBar.getIndicator().setIndicatorTextFormatListener(new OnIndicatorTextChangeListener() {
@Override
public String onIndicatorTextChange(String value, View indicatorView, int thumbPosition) {
//这里可以实现我们想要的转换方式
return "转换过后的字符串";
});
至此,即可实现上述效果.
如果任何疑问,请联系邮箱:569133338@qq.com