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://codercto.com/soft/d/4225.html

别具光芒

别具光芒

李烨 / 人民邮电出版社 / 2006-11 / 55.00元

本书面向实用,提供了大量网页设计与制作的细节图解,由浅入深地讲解网页制作的步骤与方法,同时介绍了Web标准以及使用目前流行的“层”布局方式,并结合多个实例讲解了采用层叠样式表与层布局相结合制作网页的方法。   本书给出了几大典型网页制作实例,包括小型企业网站、电子相册网站、网络电台、网上商店、旅游网站等,这些实例基本上覆盖到了常用的网页设计与制作知识。本书在详细讲解各个实例的过程中,不仅介绍......一起来看看 《别具光芒》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

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

RGB CMYK 互转工具