自定义view圆弧家百分比
来源:互联网 发布:unity3d 粒子性能优化 编辑:程序博客网 时间:2024/05/18 21:10
//新建的类的内容
package com.example.baifenbiyuanquan.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.Build;import android.support.annotation.Nullable;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.view.View;/** * author:Created by Chenxu on 2017/11/29. */public class yuan extends View implements Runnable{ private Paint inpaint; /** * 定义一个初始进度值 */ private int progress = 0; /** * 加载总进度 */ private int totalProgress = 100; /** * 内部圆环半斤 */ private int innerCircleRadius = 100; /** * 默认的外部圆环宽度 */ private int outCircleWidth = 20; private Paint outpaint; private Paint textpaint; public yuan(Context context) { this(context,null); } public yuan(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public yuan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ //内部圆 inpaint = new Paint(); inpaint.setAntiAlias(true); //外部弧度 outpaint = new Paint(); outpaint.setAntiAlias(true); //文字属性 textpaint = new Paint(); //设置画笔颜色 inpaint.setColor(Color.parseColor("#D5982E")); //设置是否填充圆 outpaint.setStyle(Paint.Style.STROKE); //设置描边宽度(圆环宽度) outpaint.setStrokeWidth(outCircleWidth); //设置文字大小 textpaint.setTextSize(35); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 画圆 canvas.drawCircle(getWidth()/2,getHeight()/2,innerCircleRadius,inpaint); //画外围弧度// canvas.drawArc(getWidth() / 2 - innerCircleRadius,getHeight() / 2 - innerCircleRadius,getWidth() / 2 + innerCircleRadius,getHeight() / 2 + innerCircleRadius,-90,(progress * 360) / totalProgress,false,outpaint); RectF oval=new RectF(); //RectF对象 oval.left=getWidth()/2-100; //左边 oval.top=getHeight()/2-100; //上边 oval.right=getWidth()/2+100; //右边 oval.bottom=getHeight()/2+100; //下边 canvas.drawArc(oval, -90, (progress*360)/100, false, outpaint);// RectF rectF = new RectF();// canvas.drawArc(); //绘制文本 String des = progress + "%"; //得到文字的宽度与高度 Paint.FontMetrics fm = new Paint.FontMetrics(); //得到文字的高度 int textHeight = (int)Math.ceil(fm.descent - fm.ascent); //的到文字宽度 int textWidth = (int)textpaint.measureText(des,0,des.length()); canvas.drawText(des,getWidth()/2 - (textWidth / 2),getHeight() / 2 - (textHeight/2),textpaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); /** * 测量三种模式 * 精确的 * * 至多 : * * 不确定的 : 用的很少,一般会用到它 * */ int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); //得到控件的宽高 int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); //定义变量记录控件的宽高 int width = 0; int height = 0; switch (widthMode){ case MeasureSpec.UNSPECIFIED: { //很少用 } break; case MeasureSpec.AT_MOST://match_parent { width = innerCircleRadius * 2 + outCircleWidth * 2; } break; case MeasureSpec.EXACTLY://wrap_content { width = widthSize;//至多有多大 } break; } switch (heightMode) { case MeasureSpec.UNSPECIFIED: { //很少用 } break; case MeasureSpec.AT_MOST://wrap_content { //精确模式 height = innerCircleRadius * 2 + outCircleWidth * 2; } break; case MeasureSpec.EXACTLY://match_parent { height = heightSize;//至多有多大 } break; } //必须调用,如果不调用的话,测量的这个高度会出现偏差 setMeasuredDimension(width,height); } public void run() { while (true) { if (progress < 100) { progress++; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } postInvalidate(); } else { progress = 0; } } }}
//Main里面的回调,执行线程,让百分比动起来
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); yuan viewById = (yuan) findViewById(R.id.circleView); new Thread(viewById).start(); }}
阅读全文
0 0
- 自定义view圆弧家百分比
- 圆弧百分比
- 自定义view实现圆弧进度条
- 圆环百分比自定义View
- 自定义view 画百分比
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- ubuntu 17.10安装64位Chrome浏览器
- Spring系列之Spring常用注解总结
- Microsoft Office 2016产品密钥生成器
- 网络请求的图片,在Adapter(适配器)中异步的处理
- shell 脚本支持从管道读取
- 自定义view圆弧家百分比
- hdu 2084 数塔
- 基于C4.5神经网络集成
- Android 项目上传Jcenter方法参考(内含两种方法)
- 多线程编程
- 使用spring配置dbcp2和pool2
- Anaconda无法用PIL,我用Pillow替代
- 单向链表的一些操作实现-Java实现
- ics实验报告