我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android如何自定义带动画的半圆环型进度效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android如何自定义带动画的半圆环型进度效果

小编给大家分享一下Android如何自定义带动画的半圆环型进度效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体内容如下

package com.newair.ondrawtext;import android.animation.ValueAnimator;import android.annotation.TargetApi;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.Typeface;import android.os.Build;import android.util.AttributeSet;import android.view.View;import android.view.animation.OvershootInterpolator;public class CustomView extends View {  //画笔  private Paint paint;  private RectF oval;  //圆弧颜色  private int roundColor;  //进度颜色  private int progressColor;  //文字内容  private boolean textIsShow;  //字体大小  private float textSize = 14;  //文字颜色  private int textColor;  //最大进度  private int max = 1000;  //当前进度  private int progress = 300;  //圆弧宽度  private int roundWidth = 30;  private int viewWidth; //宽度--控件所占区域  private float nowPro = 0;//用于动画  private ValueAnimator animator;  public CustomView(Context context) {    super(context);  }  public CustomView(Context context, AttributeSet attrs) {    super(context, attrs);    initAttrs(attrs, context);  }  public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    initAttrs(attrs, context);  }  @TargetApi(Build.VERSION_CODES.LOLLIPOP)  public CustomView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {    super(context, attrs, defStyleAttr, defStyleRes);    initAttrs(attrs, context);  }  private void initAttrs(AttributeSet attr, Context context) {    TypedArray array = context.obtainStyledAttributes(attr, R.styleable.CustomView);    roundColor = array.getColor(R.styleable.CustomView_roundColor, Color.BLACK);//环形颜色    progressColor = array.getColor(R.styleable.CustomView_progressColor, Color.RED);//进度颜色    textIsShow = array.getBoolean(R.styleable.CustomView_textIsShow, false);//文字    textSize = array.getDimension(R.styleable.CustomView_textSize, 14);//文字大小    textColor = array.getColor(R.styleable.CustomView_textColor, Color.BLACK);//文字颜色    roundWidth = array.getInt(R.styleable.CustomView_roundWidth, 30);//圆环宽度    array.recycle();    //动画    animator = ValueAnimator.ofFloat(0, progress);    animator.setDuration(1800);    animator.setInterpolator(new OvershootInterpolator());    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {      @Override      public void onAnimationUpdate(ValueAnimator animation) {        nowPro = (float) animation.getAnimatedValue();        postInvalidate();      }    });    animator.start();  }  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);    final int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);    if (widthSpecMode == MeasureSpec.AT_MOST) {//可获得最大空间      setMeasuredDimension(widthMeasureSpec, (widthSpecSize / 2) + (int) (Math.cos(20) * (widthSpecSize / 2)));    } else if (widthMeasureSpec == MeasureSpec.EXACTLY) {//一般指精确值      setMeasuredDimension(widthMeasureSpec, (widthSpecSize / 2) + (int) (Math.cos(20) * (widthSpecSize / 2)));    } else {      setMeasuredDimension(widthMeasureSpec, (viewWidth / 2) + (int) (Math.cos(20) * (viewWidth / 2)));    }  }  @Override  protected void onSizeChanged(int w, int h, int oldw, int oldh) {    super.onSizeChanged(w, h, oldw, oldh);    viewWidth = w;//得到宽度以此来计算控件所占实际大小    //计算画布所占区域    oval = new RectF();    oval.left = roundWidth + getPaddingLeft();    oval.top = roundWidth + getPaddingTop();    oval.right = viewWidth - roundWidth - getPaddingRight();    oval.bottom = viewWidth - roundWidth - getPaddingBottom();  }  @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    Paint paint = new Paint();    paint.setAntiAlias(true);            //设置画笔为无锯齿    paint.setColor(roundColor);           //设置画笔颜色    paint.setStrokeWidth(roundWidth);        //线宽    paint.setStyle(Paint.Style.STROKE);       //空心    canvas.drawArc(oval, 160, 220, false, paint);  //绘制圆弧    //画进度层    paint.setColor(progressColor);    paint.setStrokeWidth(roundWidth + 1);    canvas.drawArc(oval, 160, 220 * nowPro / max, false, paint); //绘制圆弧    if (textIsShow) {      paint.setColor(textColor);      paint.setStrokeWidth(0);      paint.setTypeface(Typeface.DEFAULT);      paint.setTextSize(textSize * 2);      float textWidth = paint.measureText((int) ((nowPro / (float) max) * 100) + "%");      canvas.drawText((int) ((nowPro / (float) max) * 100) + "%", viewWidth / 2 - textWidth / 2, viewWidth / 2, paint);    }  }  private int getDefaultHeight() {    return 0;  }  private int getDefaultWidth() {    return 0;  }  public int getRoundColor() {    return roundColor;  }  public void setRoundColor(int roundColor) {    this.roundColor = roundColor;  }  public int getProgressColor() {    return progressColor;  }  public void setProgressColor(int progressColor) {    this.progressColor = progressColor;  }  public boolean getText() {    return textIsShow;  }  public void setText(boolean text) {    this.textIsShow = text;  }  public float getTextSize() {    return textSize;  }  public void setTextSize(float textSize) {    this.textSize = textSize;  }  public int getTextColor() {    return textColor;  }  public void setTextColor(int textColor) {    this.textColor = textColor;  }  public int getMax() {    return max;  }  public void setMax(int max) {    this.max = max;  }  public int getProgress() {    return progress;  }  public void setProgress(int progress) {    this.progress = progress;  }}

自定义属性

<declare-styleable name="CustomView">    <attr name="roundColor" format="color" />    <attr name="progressColor" format="color" />    <attr name="textIsShow" format="boolean" />    <attr name="textSize" format="dimension" />    <attr name="textColor" format="color" />    <attr name="roundWidth" format="integer" />  </declare-styleable>

用法

<com.newair.ondrawtext.CustomView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:visibility="visible"    app:progressColor="@android:color/holo_orange_dark"    app:roundColor="@android:color/holo_blue_dark"    app:roundWidth="45"    app:textColor="@android:color/black"    app:textIsShow="true"    app:textSize="14sp" />

以上是“Android如何自定义带动画的半圆环型进度效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android如何自定义带动画的半圆环型进度效果

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

下载Word文档

猜你喜欢

Android如何自定义带动画的半圆环型进度效果

小编给大家分享一下Android如何自定义带动画的半圆环型进度效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下package com.newair.
2023-05-31

Android如何自定义view实现半圆环效果

小编给大家分享一下Android如何自定义view实现半圆环效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下1.自定义属性
2023-06-29

Android如何实现自定义view画圆效果

这篇文章主要介绍了Android如何实现自定义view画圆效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。看图代码:package sjx.com.custonview;i
2023-05-30

Android中怎么自定义view实现圆环进度条效果

这篇文章主要讲解了“Android中怎么自定义view实现圆环进度条效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中怎么自定义view实现圆环进度条效果”吧!核心代码自定义
2023-06-29

如何在Android中自定义一个圆环式进度条

如何在Android中自定义一个圆环式进度条?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统
2023-06-14

Android SeekBar如何自定义thumb旋转动画效果

这篇文章给大家分享的是有关Android SeekBar如何自定义thumb旋转动画效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例dimens.xml为方便管理,可以添加一些尺寸设置
2023-06-25

Android 自定义view和属性动画实现充电进度条效果

近期项目中需要使用到一种类似手机电池充电进度的动画效果,以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画和自定义view的方式来完成这个功能,将它
2022-06-06

Android自定义带水滴的进度条样式(带渐变色效果)

一、直接看效果二、直接上代码 1.自定义控件部分package com.susan.project.myapplication; import android.app.Activity; import android.content.Con
2022-06-06

Android自定义View实现圆形加载进度条效果的方法

这篇文章将为大家详细讲解有关Android自定义View实现圆形加载进度条效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。View仿华为圆形加载进度条效果图实现思路可以看出该View可分为三个部分
2023-05-30

Android如何自定义带有圆形进度条的可长按控件功能

今天小编给大家分享一下Android如何自定义带有圆形进度条的可长按控件功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。(
2023-07-02

Android如何实现自定义View圆形和拖动圆、跟随手指拖动效果

小编给大家分享一下Android如何实现自定义View圆形和拖动圆、跟随手指拖动效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!单纯的自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可我在第一次自定义Vi
2023-05-30

Android自定义带增长动画和点击弹窗提示效果的柱状图DEMO

项目中最近用到各种图表,本来打算用第三方的,例如MPAndroid,这是一个十分强大的图表库,应用起来十分方便,但是最终发现和设计不太一样,没办法,只能自己写了。今天将写好的柱状图的demo贴在这,该柱状图可根据数据的功能有一下几点:
2022-06-06

如何在Android中实现一个动画效果的自定义下拉菜单功能

如何在Android中实现一个动画效果的自定义下拉菜单功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。要实现的功能及思路如下:下拉菜单样式是自定义的、非原生效果:需要使用
2023-06-06

Android如何自定义HorizontalScrollView打造多图片OOM的横向滑动效果

这篇文章主要为大家展示了“Android如何自定义HorizontalScrollView打造多图片OOM的横向滑动效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何自定义Ho
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录