一、实现效果
滑块在进度条上滑动,不同进度值表示所选择的值,以当前表示的值应用到自己所需应用的方面。
二、自定义控件
public class CustomProgressBarWidthNew extends LinearLayout {
private CustomProgressBarPickerListener mListener;
private Context mContext;
private View mMainView;
// private TextView mTextStart;
// private TextView mTextEnd;
private ImageView mImgBar;
private TextView mTextBarBtn;
private int mProgressBarNowSelected;
private float mItemWidth;
private int mBtnW;
private int mBtnH;
private float mStartMargin;
private int mLineWidth;
private int mMaxProgress;
private int mMinProgress;
public void setOnProgressChangedListener(CustomProgressBarPickerListener listener) {
this.mListener = listener;
}
public CustomProgressBarWidthNew(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
init();
}
public CustomProgressBarWidthNew(Context context) {
super(context);
this.mContext = context;
init();
}
/**
* 初始化布局
*
*/
private void init() {
mMainView = LayoutInflater.from(mContext).inflate(R.layout.view_custom_progressbar_width_new, null);
// mTextStart = (TextView) mMainView.findViewById(R.id.text_customprogressbar_start);
// mTextEnd = (TextView) mMainView.findViewById(R.id.text_customprogressbar_end);
mTextBarBtn = (TextView) mMainView.findViewById(R.id.text_customprogressbar_bar);
mImgBar = (ImageView) mMainView.findViewById(R.id.view_customprogressbar_bar);
mImgBar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
updateBar(ev.getX(), ev.getY());
break;
case MotionEvent.ACTION_MOVE:
updateBar(ev.getX(), ev.getY());
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (mListener != null) {
mListener.onCustomProgressBarPicker(mProgressBarNowSelected);
}
break;
default:
break;
}
return true;
}
});
addView(mMainView);
}
private void updateBar(float x, float y) {
float marginl = x - mBtnW;
if (marginl > 0) {