public class ScaleRulerLayout extends ViewGroup implements ScaleRulerView.ScrollSelected {
private ScaleRulerView mRulerView;
private ImageView mCenterPointer;
private Paint mLinePaint;
private Paint mPointPaint;
private int mLineWidth;
private int mPointWidth;
private int mPadding;
private ScaleRulerView.ScrollSelected scrollSelected;
public ScaleRulerLayout(Context context) {
this(context, null);
}
public ScaleRulerLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ScaleRulerLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mLinePaint = new Paint();
mLinePaint.setAntiAlias(true);
mLineWidth = dp2px(1);
mLinePaint.setStrokeWidth(mLineWidth);
mLinePaint.setStyle(Paint.Style.FILL);
mLinePaint.setColor(Color.GRAY);
mPadding = dp2px(10);
mPointPaint = new Paint();
mPointPaint.setAntiAlias(true);
mPointWidth = dp2px(2);
mPointPaint.setStrokeWidth(mPointWidth);
mPointPaint.setStyle(Paint.Style.FILL);
mPointPaint.setColor(getResources().getColor(R.color.common_blue));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (null != mRulerView) {
mRulerView.measure(widthMeasureSpec, heightMeasureSpec);
}
if (null != mCenterPointer) {
LayoutParams layoutParams = mCenterPointer.getLayoutParams();
mCenterPointer.measure(layoutParams.width, heightMeasureSpec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (null != mRulerView) {
MarginLayoutParams lp = (MarginLayoutParams) mRulerView.getLayoutParams();
int left = getPaddingLeft();
int top = getPaddingTop();
int right = getPaddingRight() + getMeasuredWidth();
int bottom = getPaddingBottom() + getMeasuredHeight() - mLineWidth;
mRulerView.layout(left, top, right, bottom);
}
/*if (null != mCenterPointer) {
int measuredWidth = mCenterPointer.getMeasuredWidth();
int width = getWidth() + getPaddingLeft() + getPaddingRight();
int left = width / 2 - measuredWidth / 2;
int right = width / 2 + measuredWidth / 2;
mCenterPointer.layout(left, 0, right, getHeight());
}*/
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
canvas.drawLine(0, getHeight(), getWidth(), getHeight(), mLinePaint);
int start = getWidth() / 2;
canvas.drawLine(start, getHeight() / 2, start, getHeight(), mPointPaint);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mRulerView = new ScaleRulerView(getContext());
MarginLayoutParams layoutParams = new MarginLayoutParams(L
Android 滑动刻度尺实现
最新推荐文章于 2025-04-11 00:15:00 发布