Android打造带透明圆弧的ImageView(2)

public ArcImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        obtainAttributes(attrs);
    }

/**
    * Set the text that will be drawn on arc.
    * @param drawStr the text content.
    */
    public void setDrawStr(String drawStr) {
        this.mDrawStr = drawStr;
        //refresh this view
        invalidate();
    }

/**
    * Set the transparency of arc.
    * @param mArcAlpha the value of transparency.
    */
    public void setArcAlpha(int mArcAlpha) {
        this.mArcAlpha = mArcAlpha;
        //refresh this view
        invalidate();
    }

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //draw arc
        Paint arcPaint = new Paint();
        arcPaint.setStrokeWidth(mArcWidth);
        arcPaint.setStyle(Paint.Style.STROKE);
        arcPaint.setColor(mArcColor);
        arcPaint.setAlpha(mArcAlpha);
        int width = getWidth();
        int height = getHeight();
        float radius;
        if (width > height) {
            radius = mScale * height;
        } else {
            radius = mScale * width;
        }
        RectF oval = new RectF();

int center_x = width;
        int center_y = height;

switch (mDrawStyle) {
            case 0:
                center_x = 0;
                center_y = 0;
                mStartAngle = 90;
                mSweepAngle = -90;
                break;
            case 1:
                center_x = 0;
                center_y = height;
                mStartAngle = 270;
                mSweepAngle = 90;
                break;
            case 2:
                center_x = width;
                center_y = 0;
                mStartAngle = 180;
                mSweepAngle = -90;
                break;
            case 3:
                center_x = width;
                center_y = height;
                mStartAngle = 180;
                mSweepAngle = 90;
                break;
            case 4:
                center_x = width / 2;
                center_y = height / 2;
                mStartAngle = 270;
                mSweepAngle = 90;
                break;
        }
        float left = center_x - radius;
        float top = center_y - radius;
        float right = center_x + radius;
        float bottom = center_y + radius;
        oval.set(left, top, right, bottom);
        canvas.drawArc(oval, mStartAngle, mSweepAngle, false, arcPaint);

//draw text
        Paint textPaint = new Paint();
        textPaint.setTextSize(mTextSize);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setColor(mTextColor);
        Path path = new Path();
        path.addArc(oval, mStartAngle, mSweepAngle);
        canvas.drawTextOnPath(mDrawStr, path, mHOffset, mVOffset, textPaint);
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/57c780ddaf74235e22fc733cd8e9577b.html