Android 滑动刻度尺实现

本文详细介绍了如何在Android应用中实现一个可滑动的刻度尺组件,包括步骤、关键代码和注意事项,帮助开发者创建具有交互性的用户界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值