博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 自定义View,绘制一个计时View
阅读量:3750 次
发布时间:2019-05-22

本文共 2215 字,大约阅读时间需要 7 分钟。

这里写图片描述

箭头指向的角度慢慢缩小

  1. 每次都需要对填充的角度进行绘制
  2. 每次都需要绘制外面的圆圈

    使用的函数:

drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

Draw the specified arc, which will be scaled to fit inside the specified oval.

  • RectF 就是范围了
  • startAngle 开始角度,当你传入0的时候,相当于手表的三点钟方向
  • sweepAngle扫描的角度
  • useCenter 这个传入true,传入false感觉很奇怪,说不明白,可以自己试一下
  • paint 画笔
    这里写图片描述
    这里开始角度用270度 - 扫描的角度
    开始角度可以为负数

代码

public class MyView extends View {
private Paint mOutPaint; private Paint mInPaint; private float currentValue; public MyView(Context context) { super(context); init(); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mOutPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mOutPaint.setStrokeWidth(0); mOutPaint.setStyle(Paint.Style.STROKE); mOutPaint.setColor(Color.BLUE); mInPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mInPaint.setColor(mOutPaint.getColor()); } @Override protected void onDraw(final Canvas canvas) { int paddingLeft = getPaddingLeft(); int paddingTop = getPaddingTop(); int paddingRight = getPaddingRight(); int paddingBottom = getPaddingBottom(); final RectF drawRect = new RectF(paddingLeft, paddingTop, getWidth() - paddingRight, getHeight() - paddingBottom); float end = (currentValue * 360); float start = 270 - end; canvas.drawArc( drawRect, start, end, true, mInPaint); canvas.drawOval(drawRect, mOutPaint); } public void doAnimation() { ValueAnimator anim = ValueAnimator.ofFloat(1f, 0f); anim.setDuration(3000); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { currentValue = (float) animation.getAnimatedValue(); MyView.this.invalidate(); } }); anim.start(); }}

下班了,溜了溜了!!!

你可能感兴趣的文章
L1-002 打印沙漏 (20分)
查看>>
P1217 [USACO1.5]回文质数 Prime Palindromes
查看>>
P1014 Cantor表
查看>>
实验十 算术编码
查看>>
实验八 费诺编码
查看>>
实验二 二维随机变量信息量的计算
查看>>
实验七 香农编码
查看>>
使用react脚手架创建react项目时发生错误
查看>>
关于setState是异步与同步的
查看>>
20. 有效的括号---js解法
查看>>
56. 合并区间---js解法
查看>>
5. 最长回文子串---js解法
查看>>
USACO 2007 Open Gold/acwing2240:餐饮 (拆点+最大流)‘三分图匹配’
查看>>
那些年你不知道的C++STL进制转换函数
查看>>
区间和并问题 思路加模板整理(校门外的树)
查看>>
C++中next_permutation函数的使用方法、原理及手动实现
查看>>
网络流常用小技巧之 拆点
查看>>
掌握01分数规划 思想+应用模型总结
查看>>
最大权闭合子图
查看>>
最大密度子图
查看>>