自定义view,可拖拽进度和吸附效果的圆形进度条

前言

最近接到一个需求,第一眼看到ui交互效果时,瞬间想对产品小哥说“尼玛,这么会玩,你咋不上天”。确认了具体交互细节,喝了两口农夫三拳,开始了两耳不闻窗外事,一心只想撸代码的过程。

先上ui效果

这里写图片描述
说明:

  • 外圈弧形上面是进度的标记点,默认在12点位置,也是progress 0
  • 在圆环范围内,可以任意拖拽进度的标记点,当拖拽结束松手的时候,会自动吸附在外圈弧形对应的progress位置
  • 如果进度标记点拖拽的坐标位置在圆环以外,那么标记点的位置自动限制在外圈弧形上面
下面是整个自定义view的代码:
public class RoundProgressView extends View {

    /**context*/
    private Context mContext;

    /**整个view的宽度*/
    private int mViewWidth;
    /**整个view的高度*/
    private int mViewHeight;
    /**整个view的中心X坐标*/
    private float mCenterX;
    /**整个view的中心y坐标*/
    private float mCenterY;
	/**圆环距离view的间距*/
    private float mOuterMargin;
    
    /**外层弧线画布*/
    private RectF mDashRect = new RectF();
    /**外层弧线的画笔*/
    private Paint mDashPaint;

	/**外层圆的画笔*/
    private Paint mOuterPaint;
    /**外层圆半径*/
    private float mOuterRadius;
   
    /**内层圆的画笔*/
    private Paint mInnerPaint;
    /**内层圆半径*/
    private float mInnerRadius;
    
    /**中心点画布*/
    private RectF mCenterRect = new RectF();
    /**中心点的画笔*/
    private Paint mCenterPaint;
    /**中心点背景图*/
    private Bitmap mCenterBitmap;

    /**进度标记icon的半径*/
    private static final int PROGRESS_RADIUS = 15;
    /**进度标记画布*/
    private RectF mProgressRect = new RectF();
    /**进度标记画笔*/
    private Paint mProgressPaint;
    /**进度标记*/
    private Bitmap mProgressBitmap;
    /**进度标记的半径*/
    private  int mProgressRadius;
    /**进度条最大值*/
    private static final int MAX_PROGRESS = 100;
    /**当前的百分值*/
    private int mProgress;
    /**进度条标志移动后的角度, 0 ~ 360*/
    private int mAngle = 0;
    /**进度标记开始位置的x坐标*/
    private float mProgressPointX;
    /**进度标记开始位置的y坐标*/
    private float mProgressPointY;

    
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值