广告
返回顶部
首页 > 资讯 > 移动开发 >Android自定义View弧线进度控件
  • 353
分享到

Android自定义View弧线进度控件

viewAndroid 2022-06-06 08:06:35 353人浏览 泡泡鱼
摘要

这个是一个以弧线为依托的进度控件,主要包括了两个圆弧、一个圆、一个文本。   当我们点击开始按钮的时候,会出现一个动画,逐渐的出现进度,好了,下面开始我们的编码。

这个是一个以弧线为依托的进度控件,主要包括了两个圆弧、一个圆、一个文本。

 

当我们点击开始按钮的时候,会出现一个动画,逐渐的出现进度,好了,下面开始我们的编码。

新建一个类,继承自View,实现三个构造方法,接着定义变量,初始化变量的数据。代码如下:


private Paint mArcPaint, mCirclePaint, mTextPaint, mPaint;
 private float length;
 private float mRadius;
 private float mCircleXY;
 private float mSweepValue = 0;
 private String mShowText = "0%";
 private RectF mRectF;
 public MViewOne(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initView();
 }
 public MViewOne(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView();
 }
 public MViewOne(Context context) {
  super(context);
  initView();
 }
 private void initView() {
  mArcPaint = new Paint();
  mArcPaint.setStrokeWidth(50);
  mArcPaint.setAntiAlias(true);
  mArcPaint.setColor(Color.GREEN);
  mArcPaint.setStyle(Style.STROKE);
  mCirclePaint = new Paint();
  mCirclePaint.setColor(Color.GREEN);
  mCirclePaint.setAntiAlias(true);
  mTextPaint = new Paint();
  mTextPaint.setAntiAlias(true);
  mTextPaint.setColor(Color.RED);
  mTextPaint.setStrokeWidth(0);
  mPaint = new Paint();
  mPaint.setStrokeWidth(40);
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.YELLOW);
  mPaint.setStyle(Style.STROKE);
 }

可以看到,这里一共定义了四个画笔,两个画弧形,一个画文本,还有一个绘制圆。

在我们的onSizeChange方法里面,再给变量赋值。


 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  length = w;
  mCircleXY = length / 2;
  mRadius = (float) (length * 0.5 / 2);
 }

这时候,圆的半径、圆的起绘点,都已经有值了。

下面开始绘制


@Override
 protected void onDraw(canvas canvas) {
  super.onDraw(canvas);
  // 画圆
  mRectF = new RectF((float) (length * 0.1), (float) (length * 0.1),
    (float) (length * 0.9), (float) (length * 0.9));
  canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
  // 画弧线
  canvas.drawArc(mRectF, 270, 360, false, mPaint);
  canvas.drawArc(mRectF, 270, mSweepValue, false, mArcPaint);
  // 绘制文字
  float textWidth = mTextPaint.measureText(mShowText); //测量字体宽度,我们需要根据字体的宽度设置在圆环中间
  canvas.drawText(mShowText, (int)(length/2-textWidth/2), (int)(length/2+textWidth/2) , mTextPaint);
 }

这个时候,全部的效果已经出来了,但是这个还是静态的,对外暴露一个方法,让数据可以动态的刷新


 public void setProgress(float mSweepValue) {
  float a = (float) mSweepValue;
  if (a != 0) {
   this.mSweepValue = (float) (360.0 * (a / 100.0));
   mShowText = mSweepValue + "%";
   Log.e("this.mSweepValue:", this.mSweepValue + "");
  } else {
   this.mSweepValue = 25;
   mShowText = 25 + "%";
  }
  invalidate();
 }

好了,所有的代码都在这里了,老规矩,最后我贴上全部的代码:


public class MViewOne extends View {
 private Paint mArcPaint, mCirclePaint, mTextPaint, mPaint;
 private float length;
 private float mRadius;
 private float mCircleXY;
 private float mSweepValue = 0;
 private String mShowText = "0%";
 private RectF mRectF;
 public MViewOne(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initView();
 }
 public MViewOne(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView();
 }
 public MViewOne(Context context) {
  super(context);
  initView();
 }
 private void initView() {
  mArcPaint = new Paint();
  mArcPaint.setStrokeWidth(50);
  mArcPaint.setAntiAlias(true);
  mArcPaint.setColor(Color.GREEN);
  mArcPaint.setStyle(Style.STROKE);
  mCirclePaint = new Paint();
  mCirclePaint.setColor(Color.GREEN);
  mCirclePaint.setAntiAlias(true);
  mTextPaint = new Paint();
  mTextPaint.setAntiAlias(true);
  mTextPaint.setColor(Color.RED);
  mTextPaint.setStrokeWidth(0);
  mPaint = new Paint();
  mPaint.setStrokeWidth(40);
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.YELLOW);
  mPaint.setStyle(Style.STROKE);
 }
 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  length = w;
  mCircleXY = length / 2;
  mRadius = (float) (length * 0.5 / 2);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  // 画圆
  mRectF = new RectF((float) (length * 0.1), (float) (length * 0.1),
    (float) (length * 0.9), (float) (length * 0.9));
  canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
  // 画弧线
  canvas.drawArc(mRectF, 270, 360, false, mPaint);
  canvas.drawArc(mRectF, 270, mSweepValue, false, mArcPaint);
  // 绘制文字
  float textWidth = mTextPaint.measureText(mShowText); //测量字体宽度,我们需要根据字体的宽度设置在圆环中间
  canvas.drawText(mShowText, (int)(length/2-textWidth/2), (int)(length/2+textWidth/2) , mTextPaint);
 }
 public void setProgress(float mSweepValue) {
  float a = (float) mSweepValue;
  if (a != 0) {
   this.mSweepValue = (float) (360.0 * (a / 100.0));
   mShowText = mSweepValue + "%";
   Log.e("this.mSweepValue:", this.mSweepValue + "");
  } else {
   this.mSweepValue = 25;
   mShowText = 25 + "%";
  }
  invalidate();
 }
}

谢谢阅读,学习重在坚持,贵在坚持。

您可能感兴趣的文章:Android自定义View实现带数字的进度条实例代码Android 自定义view和属性动画实现充电进度条效果Android自定义View基础开发之图片加载进度条Android自定义view实现水波纹进度球效果Android自定义View仿华为圆形加载进度条Android自定义View之圆形进度条式按钮Android自定义View实现渐变色进度条Android自定义View实现环形进度条的思路与实例android自定义view制作圆形进度条效果Android自定义View实现简单炫酷的球体进度球实例代码


--结束END--

本文标题: Android自定义View弧线进度控件

本文链接: https://www.lsjlt.com/news/24651.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android自定义View弧线进度控件
    这个是一个以弧线为依托的进度控件,主要包括了两个圆弧、一个圆、一个文本。   当我们点击开始按钮的时候,会出现一个动画,逐渐的出现进度,好了,下面开始我们的编码。 ...
    99+
    2022-06-06
    view Android
  • Android怎么自定义View实现圆弧进度效果
    这篇文章主要介绍“Android怎么自定义View实现圆弧进度效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义View实现圆弧进度效果”文章能帮助大家解决问题。技术实现Ar...
    99+
    2023-07-06
  • Android自定义View圆形进度条控件(三)
    继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲染以及画布旋转等知识点,效果如下: 虽然步骤类似,但是我还是要写,毕竟基础的...
    99+
    2022-06-06
    view 进度条 Android
  • Android view自定义带文字带进度的控件
    目标:自定义一个带文字带进度的控件,具体内容如下效果图:不啰嗦先看东西:步骤分析提取自定义属性//提供对外暴露的属性,如有不够自己扩展 <declare-styleable name="DescProgressView"> ...
    99+
    2023-05-30
    android view 进度
  • Android自定义View圆形进度条控件的方法
    这篇文章主要讲解了Android自定义View圆形进度条控件的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲...
    99+
    2023-05-31
    android roi %d
  • Android自定义View实现圆弧进度效果逐步完成过程
    目录技术实现1.继承自View2.Paint初始化3.Canvas绘制4.添加动画效果及数据涉及到的知识Canvas(画布),Paint(画笔),自定义控件等有三种:一个是直接从Vi...
    99+
    2023-05-16
    Android自定义View圆弧进度 Android实现圆弧进度 Android自定义View
  • Android自定义View简易折线图控件(二)
    继续练习自定义View,这次带来的是简易折线图,支持坐标点点击监听,效果如下: 画坐标轴、画刻度、画点、连线。。x、y轴的数据范围是写死的 1 <= x <= 7...
    99+
    2022-06-06
    折线图 view Android
  • android自定义View之复合控件
    复合控件可以很好地创建出具有重用功能的控件集合。 很多的APP都有一些共通的UI界面,为了统一应用程序的风格,下面我们就以一个Topbar为实例讲解复合控件。 实现效果如图: 第一...
    99+
    2022-11-12
  • Android如何自定义View歌词控件
    本篇内容介绍了“Android如何自定义View歌词控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、 歌词解析歌词实体类Lrc...
    99+
    2023-06-20
  • Android利用Paint自定义View实现进度条控件方法示例
    前言View的三大流程:测量,布局,绘制,自定义View学的是啥?无非就两种:绘制文字和绘制图像。我们在上一篇文章《Android绘图之Paint的使用》中学习了Paint的基本用法,但是具体的应用我们还没有实践过。从标题中可知,本文是带领...
    99+
    2023-05-30
    paint 自定义view 进度条控件
  • Android view自定义实现动态进度条
    Android  自定义view实现动态进度条 效果图: 这个是看了梁肖的demo,根据他的思路自己写了一个,但是我写的这个貌似计算还是有些问题,从上面的图就可以...
    99+
    2022-06-06
    view 进度条 动态 Android
  • Android自定义View实现圆形进度条
    本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个...
    99+
    2022-11-13
  • Android自定义控件实现圆形进度条
    项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义进度条的效果: 先看效果如图… ...
    99+
    2022-06-06
    进度条 Android
  • Android自定义View仿QQ等级天数进度
    最近一直都在看自定义View这一块。差不多一个星期了吧。这个星期坚持每天更新博客,感觉自己的技术也有点突破,对自定义View的计算也有了更深的认识。 今天看到手机一个成长天数进...
    99+
    2022-06-06
    view Android
  • Android自定义View控件实现刷新效果
    三种得到LinearInflater的方法 a. LayoutInflater inflater = getLayoutInflater(); b. LayoutInflate...
    99+
    2022-06-06
    view Android
  • Android自定义View圆形百分比控件(一)
    做一个自定义View的小练习,效果如下 只需要画一个圆、一个圆弧、一个百分比文本,添加一个点击事件,传入百分比重绘 1、在res/values文件夹下新建attrs.xml文...
    99+
    2022-06-06
    view 百分比 Android
  • Android自定义view贝塞尔曲线
    本文实例为大家分享了Android自定义view贝塞尔曲线,供大家参考,具体内容如下 贝塞尔曲线 以一个简单的贝塞尔曲线为例,二阶曲线原理 贝塞尔曲线很多功能都会用到,比如小火箭发...
    99+
    2022-11-13
  • Android自定义控件制作显示进度的Button
    最近看到一些应用在下载文件的时候,并没有额外弹出进度条,而是很炫的使用启动下载任务的Button直接显示文件的下载进度,通过改变其背景色,从左向右推进,直到填满整个Button...
    99+
    2022-06-06
    button Android
  • Android自定义view实现进度条指示效果
    先看看效果图: 首先是布局文件 <FrameLayout android:layout_width="match_parent" android:layout_...
    99+
    2022-06-06
    view 进度条 Android
  • android自定义view制作圆形进度条效果
    还是我们自定View的那几个步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw 1、自定...
    99+
    2022-06-06
    view 进度条 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作