Android 可配置圆环 SuperCircleSample

码农软件 · 软件分类 · Android UI 组件 · 2019-04-23 17:14:03

软件介绍

Android自定义view实现可配置圆环和圆环动画。

实现思路步骤

  1. 画一个实心的白色圆

  2. 画一个默认的灰色的圆环

  3. 画一个带颜色的白色圆环

这些是要用到的一些变量:

 private int mViewWidth; //view的宽
    private int mViewHeight;    //view的高
    private int mViewCenterX;   //view宽的中心点
    private int mViewCenterY;   //view高的中心点
    private int mMinRadio; //最里面白色圆的半径
    private float mRingWidth; //圆环的宽度
    private int mSelect;    //分成多少段
    private int mSelectAngle;   //每个圆环之间的间隔
    private int mMinCircleColor;    //最里面圆的颜色
    private int mMaxCircleColor;    //最外面圆的颜色
    private int mRingNormalColor;    //默认圆环的颜色
    private Paint mPaint;    private int color[] = new int[3];   //渐变颜色

    private float mRingAngleWidth;  //每一段的角度

    private RectF mRectF; //圆环的矩形区域
    private int mSelectRing = 0;        //要显示几段彩色

    private boolean isShowSelect = false;   //是否显示断

在onLayout中取得中心点,和圆环区域(RectF)

 @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {        super.onLayout(changed, left, top, right, bottom);
        mViewWidth = getMeasuredWidth();
        mViewHeight = getMeasuredHeight();
        mViewCenterX = mViewWidth / 2;
        mViewCenterY = mViewHeight / 2;
        mRectF = new RectF(mViewCenterX - mMinRadio - mRingWidth / 2, mViewCenterY - mMinRadio - mRingWidth / 2, mViewCenterX + mMinRadio + mRingWidth / 2, mViewCenterY + mMinRadio + mRingWidth / 2);
        mRingAngleWidth = (360 - mSelect * mSelectAngle) / mSelect;
    }

这里mRectF区域的left是中心点减去最里面实心圆的半价然后在减去圆环的宽度,right则相加;right和top一样的道理;每个端的角度就是(360°-断的数量*段与段之间的间隔)/端的数量 ####现在开始画了 画最里面的实心圆和最外面的灰色圆

  @Override
    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        /**         * 显示彩色断大于总共的段数是错误的         */
        if (isShowSelect && mSelectRing > mSelect) {            return;
        }
        mPaint.setColor(mMaxCircleColor);
        canvas.drawCircle(mViewCenterX, mViewCenterY, mMinRadio + mRingWidth + 20, mPaint);
        mPaint.setColor(mMinCircleColor);
        canvas.drawCircle(mViewCenterX, mViewCenterY, mMinRadio, mPaint);        //画默认圆环
        drawNormalRing(canvas);        //画彩色圆环
        drawColorRing(canvas);
    }

画默认的圆环 首先设置画笔只填充边距,画笔的宽度和颜色

Paint ringNormalPaint = new Paint(mPaint);
        ringNormalPaint.setStyle(Paint.Style.STROKE);
        ringNormalPaint.setStrokeWidth(mRingWidth);
        ringNormalPaint.setColor(mRingNormalColor);

然后画一个360的圆环

 canvas.drawArc(mRectF, 270, 360, false, ringNormalPaint);

最后判断是否要显示段,如果显示就在刚才圆环的基础上画7个小的间隔

 if (!isShowSelect) {            return;
        }
        ringNormalPaint.setColor(mMaxCircleColor);        for (int i = 0; i < mSelect; i++) {
            canvas.drawArc(mRectF, 270 + (i * mRingAngleWidth + (i) * mSelectAngle), mSelectAngle, false, ringNormalPaint);
        }

这边之所以是从270°开始是因为默认的0°在我们常见的90°的地方

画彩色的圆环和默认的圆环的原理是一样的

本文地址:https://www.codercto.com/soft/d/4225.html

Cyberwar

Cyberwar

Kathleen Hall Jamieson / Oxford University Press / 2018-10-3 / USD 16.96

The question of how Donald Trump won the 2016 election looms over his presidency. In particular, were the 78,000 voters who gave him an Electoral College victory affected by the Russian trolls and hac......一起来看看 《Cyberwar》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具