效果图如上,自定义方形的进度条,第一个是100%,第二个是70%

其实很简单的,就Path类

public class SquareProgressBar extends View { private int progress = 70;//进度 private int strokeWidth = 20; private Paint paint = null; private Path path = null; private int margin; public SquareProgressBar(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { paint = new Paint(); margin = convertDpToPx(10, context); paint.setStyle(Paint.Style.STROKE); paint.setColor(context.getResources().getColor( android.R.color.holo_red_dark)); paint.setStrokeWidth(margin); paint.setAntiAlias(true); paint.setStyle(Style.STROKE); path = new Path(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float scope = getMeasuredWidth() * 2 + getMeasuredHeight() * 2; DrawLocation mLocation = getLocation(scope); if (mLocation.place == Place.TOP) { path.moveTo(margin, 10); path.lineTo(mLocation.location, 10); canvas.drawPath(path, paint); } if (mLocation.place == Place.RIGHT) { path.moveTo(margin, 10); path.lineTo(getMeasuredWidth()-10, 10); path.moveTo(getMeasuredWidth() - 10, 10); path.lineTo(getMeasuredWidth(), mLocation.location); canvas.drawPath(path, paint); } if (mLocation.place == Place.BOTTOM) { path.moveTo(margin, 10); path.lineTo(getMeasuredWidth(), 10); path.moveTo(getMeasuredWidth() - 10, 10); path.lineTo(getMeasuredWidth() - 10, getMeasuredHeight()); path.moveTo(getMeasuredWidth() - 10, getMeasuredHeight()); path.lineTo(mLocation.location, getMeasuredHeight()); canvas.drawPath(path, paint); } if (mLocation.place == Place.LEFT) { path.moveTo(margin, 10); path.lineTo(getMeasuredWidth(), 10); path.moveTo(getMeasuredWidth() - 10, 10); path.lineTo(getMeasuredWidth() - 10, getMeasuredHeight()); path.moveTo(getMeasuredWidth() - 10, getMeasuredHeight()); path.lineTo(margin, getMeasuredHeight()); path.moveTo(margin, getMeasuredHeight()); path.lineTo(margin, mLocation.location); Log.i("lcf", " mLocation.location = " + mLocation.location); canvas.drawPath(path, paint); } } public void setProgress(int progress) { this.progress = progress; postInvalidate(); } private DrawLocation getLocation(float scope) { float length = scope * progress / 100; DrawLocation mLocation = new DrawLocation(); if (length > getMeasuredWidth()) { float second = length - getMeasuredWidth(); if (second > getMeasuredHeight()) { float third = second - getMeasuredHeight(); if (third > getMeasuredWidth()) { float four = third - getMeasuredWidth(); mLocation.place = Place.LEFT; mLocation.location = getMeasuredHeight() - four; } else { mLocation.place = Place.BOTTOM; mLocation.location = getMeasuredWidth() - third; } } else { mLocation.place = Place.RIGHT; mLocation.location = second; } } else { mLocation.place = Place.TOP; mLocation.location = length; } return mLocation; } private class DrawLocation { public Place place; public float location; } public enum Place { LEFT, RIGHT, TOP, BOTTOM } public int convertDpToPx(float dp, Context context) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); }

android 自定义进度条矩形框,Android 自定义方形进度条相关推荐

  1. android矩形输入框,Android中实现在矩形框中输入文字显示剩余字数的功能

    虽然这两个功能都比较简单,但是在实际app开发中真的很常见,特别是显示字数或剩余字数这个功能 如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个backg ...

  2. android自定义矩形框,Android中ImageCropper矩形、圆形 裁剪框的实现方法

    前言 支持圆形裁剪框,裁剪后生成圆形图案. 代码基于开源项目修改,github上项目链接:https://www.easck.com/> 说一下圆形裁剪实现部分: 1.UI方面,自定义Circl ...

  3. android自定义矩形框,Android 中自定义长方形

    android 自定义控件有几种方式 今天是我第一次写博客,也是第一次学习写自定义控件,不足的地方望大家指正. 同时注意自定义控件的命名空间 下面是代码; package com.example.ch ...

  4. Android学习之复选框checkbox自定义样式以及调整图片大小

    1.自定义样式: 下载复选框样式图:https://www.iconfont.cn/home/index?spm=a313x.7781069.1998910419.2 图片重命名为英文(否则找不到)并 ...

  5. android xml图片圆角矩形,使用Path自定义圆角图片

    简单实现圆角图片CircleView 效果: CircleImageView代码: public class CircleImageView extends AppCompatImageView { ...

  6. android怎么加矩形框,Android shape 矩形框子

    Android shape 矩形边框 前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...

  7. android 画空心矩形框,Android实现空心圆角矩形按钮的实例代码

    搜索热词 页面上有时会用到背景为空心圆角矩形的Button,可以通过xml绘制出来. drawrable文件夹下bg_red_hollow_rectangle.xml android:shape=&q ...

  8. android 仿微信加载框,Android自定义控件——仿微信半透明加载框

    在我们的app中不免回遇到耗时操作,这时我们给个加载框进行过度,使用户体验大大加强. 一.CustomDialog类的编写 package com.daqsoft.jingguan.weight; i ...

  9. android相机截取矩形框,Android自定义照相机实现只拍摄矩形区域(重传)

    [实例简介] 自定义Android照相机,实现只拍摄矩形区域.完美解决预览及拍照时的照片拉伸失真,旋转等问题 [实例截图] [核心代码] 7a46ebca-b94c-49fa-8696-3c64dc2 ...

最新文章

  1. Rosetta | Rosetta简介
  2. PEAK6 2020校招OA
  3. 常考数据结构与算法:判断一个链表是否为回文结构
  4. 机器学习入门学习笔记:(1)BP神经网络原理推导及程序实现
  5. Busybox 设置登录用户名、密码
  6. 判断ShellExecute函数是否执行完一个程序的方法
  7. PowerShell在Exchange2010下快速创建动态通讯组
  8. fanuc机器人提示暂停_川崎机器人故障排除参考方法
  9. java中获取时间6,Java中获取指定日为星期几及其他日期操作(2)
  10. 程序员获取编程灵感的10 种方式
  11. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测
  12. android WebViewClient和WebChromeClient
  13. VMware Workstation 常见问题解决
  14. [转载] Python水平自测!100道经典练习题.pdf(附答案)
  15. 手机怎么用外嵌字幕_iphone 12发布 ! “预购、定金、尾款、换手机”用英语怎么说?...
  16. 中国天气网城市编码获取地址
  17. 【数据挖掘】2022年深信服科技机器学习工程师笔试
  18. zencart模板修改的地方
  19. u盘启动 联想一体机_Lenovo消费台式机与一体机预装Windows 8改装Windows 7的解决方案...
  20. 利用爬虫获取免费IP代理

热门文章

  1. 八种必备户外装备包你踏遍地球
  2. linux centos7 解压tar.gz
  3. 计算机电源的正确使用,终于懂得电脑电源保养方法
  4. OpenGL学习(九)阴影映射(shadowMapping)
  5. win10设置虚拟内存_电脑配置强,虚拟内存没有用?教你这样设置,瞬间提升流畅度!...
  6. 37本国产SCI期刊推荐!涵盖9大领域,建议收藏!①
  7. 老子道德经81章全文及解释
  8. 广和通LTE-A模组FG101FM101系列全线量产,提升Cat 6新体验
  9. Minecraft 1.18.1、1.18.2模组开发 05.发射器+投掷物
  10. python : time模块weekday()