android自定义view实现数字进度条

 更新时间:2018年12月31日 10:23:03   作者:zhoushenxian  
这篇文章主要为大家详细介绍了android自定义view实现数字进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

之前看到过一个数字进度条,一直想写,今天就把这个实现下,想起来也是很简单的,先看下实现的效果:

思路:

绘制2根线 绘制进度条的文字,不断的改变起点和终点,然后没多少时间去更新UI就ok,在这就不画图了,看代码就看的明白,不要想的很复杂!

package com.tuya;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
/**
 * Created by admin on 2016/12/19.
 */
public class DownLoadProgressView extends View {
 private Paint paint;//绘制进度条画笔
 private Paint textPaint;//绘制文字画笔
 private Paint dottePaint;//绘制灰色线画笔
 private int width;
 private int height;
 private int padding =5;
 private int value = 0;
 public DownLoadProgressView(Context context) {
  this(context,null);
 }
 public DownLoadProgressView(Context context, AttributeSet attrs) {
  this(context, attrs,0);
 }
 public DownLoadProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initPaint();
 }
 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  width = w;
  height = h;
 }
 /**
  * 初始化画笔
  */
 private void initPaint() {
  paint = new Paint();
  paint.setAntiAlias(true);
  paint.setStrokeWidth(2);
  paint.setStyle(Paint.Style.FILL);
  paint.setColor(Color.BLUE);

  textPaint = new Paint();
  textPaint.setAntiAlias(true);
  textPaint.setStrokeWidth(3);
  textPaint.setStyle(Paint.Style.FILL);
  textPaint.setColor(Color.BLUE);
  textPaint.setTextSize(12);

  dottePaint = new Paint();
  dottePaint.setAntiAlias(true);
  dottePaint.setStrokeWidth(2);
  dottePaint.setStyle(Paint.Style.FILL);
  dottePaint.setColor(Color.parseColor("#e5e5e5"));
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  String str = value+"%";
  float strWidth = textPaint.measureText(value+"%")+padding;//绘制文字的宽度 +padding是为了防止在进度条加载完毕的时候文字绘制出现被切掉情况
  Rect rect = new Rect();
  textPaint.getTextBounds(str,0,str.length(),rect);
  canvas.drawLine(0,height/2,value*((width-strWidth)/100),height/2,paint);//绘制进度
  canvas.drawText(value+"%",value*((width-strWidth)/100)+padding,(height-rect.height())/2+2*padding,textPaint);//绘制进度文字 这个高度+2*padding是因为drawText是根据基线计算的,要准确的话要去求基线
  canvas.drawLine(value*((width-strWidth)/100)+strWidth+padding,height/2,width,height/2,dottePaint);//绘制灰色进度表示剩余多少
  postDelayed(new Runnable() {
   @Override
   public void run() {
    if(value<100){
     value++;
     postInvalidate();
    }
   }
  },100);
 }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="#7EC0EE">
 <com.tuya.DownLoadProgressView
  android:id="@+id/dpv"
  android:layout_width="fill_parent"
  android:layout_height="30dp"
  android:layout_marginLeft="10dp"
  android:layout_marginRight="10dp"
  android:layout_marginTop="60dp"
  ></com.tuya.DownLoadProgressView>
</RelativeLayout>

github:NumberProgress

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • android获取当前运行Activity名字的方法

    android获取当前运行Activity名字的方法

    这篇文章主要介绍了android获取当前运行Activity名字的方法,对比分析了两种实现方法供大家选择,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 浅谈Android开发Webview的Loading使用效果

    浅谈Android开发Webview的Loading使用效果

    这篇文章主要为大家介绍了浅谈Android开发Webview的Loading使用效果详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Android使用kotlin实现多行文本上下滚动播放

    Android使用kotlin实现多行文本上下滚动播放

    这篇文章主要为大家详细介绍了Android使用kotlin实现多行文本的上下滚动播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 详解如何在Flutter中集成华为认证服务

    详解如何在Flutter中集成华为认证服务

    这篇文章主要介绍了详解如何在Flutter中集成华为认证服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Android高性能日志写入方案的实现

    Android高性能日志写入方案的实现

    这篇文章主要给大家介绍了关于Android高性能日志写入方案的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Android getSystemService用法实例总结

    Android getSystemService用法实例总结

    这篇文章主要介绍了Android getSystemService用法,结合实例形式总结分析了getSystemService获取系统Service的相关使用方法与注意事项,需要的朋友可以参考下
    2016-01-01
  • Android 中 Swipe、Scroll 和 Fling 的区别解析

    Android 中 Swipe、Scroll 和 Fling 的区别解

    Swipe、Scroll和Fling是Android中常见的触摸手势,它们在用户体验和技术实现上各有特点,Swipe用于快速切换,Scroll用于连续滚动,Fling用于实现惯性滚动,开发者可以根据需求选择合适的手势类型,并结合GestureDetector等工具实现各种交互效果,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Flutter 插件url_launcher简介

    Flutter 插件url_launcher简介

    最近项目需求是打开一个连接跳转到安卓或苹果默认的浏览器。虽然开始一个简单的要求,其中的一个细节就是执行打开网页这一操作后,不能看上去像在应用内部打开,看上去要在应用外部打开,今天小编给大家介绍Flutter 插件url_launcher的相关知识,感兴趣的朋友一起看看吧
    2020-04-04
  • Android MPAndroidChart绘制原理

    Android MPAndroidChart绘制原理

    这篇文章主要介绍了Android MPAndroidChart绘制原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Android开发中软键盘的显示和隐藏

    Android开发中软键盘的显示和隐藏

    本篇内容通过代码示例给大家详细讲解了关于Android开发中软键盘的显示和隐藏的代码实现过程以及容易忽略的问题,来学习下吧。
    2017-12-12

最新评论