返回介绍

Android 开发:ImageView 上绘制旋转圆环(透明度不同的旋转圆环,利用 canvas.drawArc 实现)

发布于 2025-02-26 12:46:18 字数 1859 浏览 0 评论 0 收藏 0

上文已经绘制了圆环,但仔细分析就知,如果只需要圆环的话,那么只绘制圆环就可以,不用画内圆和外圆了。事实证明也是如此。

但是要做成和下面的圆环透明度不一的效果上面的方法还是达不中:

用 drawCircle 不中了,经查 android 提供了绘制圆弧的函数 drawArc,参考 http://zhidao.baidu.com/question/469977150.html,也可以看这里 http://blog.chinaunix.net/uid-23392298-id-3345789.html

canvas.drawArc(new RectF(0, 0, 128, 128), 0, 360, true, new Paint(
Paint.ANTI_ALIAS_FLAG));
参数 1:圆的范围大小
参数 2:起始角度
参数 3:圆心角角度,360 为圆,180 为半圆
参数 4:中心
参数 5:画笔 Paint,可以设置画线 or 填充,设置颜色,设置线的粗细等等第四个参数

最关键的是第一个参数 RectF,在什么地方绘制圆弧就是由这个矩形的位置确定的。根据 上文 ,这个 RectF 应该是内切圆弧的外圆(尽管没画,但还是有)。所以其左上点及右下点坐标为:

RectF rect2 = new RectF(center-(innerCircle + 1 +ringWidth/2),
center-(innerCircle + 1 +ringWidth/2),
center+(innerCircle + 1 +ringWidth/2),
center+(innerCircle + 1 +ringWidth/2));

为了绘制出透明度不同的圆环分两部来绘制:

this.paint.setARGB(200, 127, 255, 212);
this.paint.setStrokeWidth(ringWidth);
// 绘制不透明部分
canvas.drawArc(rect2, 180+startAngle, 90, false, paint);
canvas.drawArc(rect2, 0+startAngle, 90, false, paint);
// 绘制透明部分
this.paint.setARGB(30, 127, 255, 212);
canvas.drawArc(rect2, 90+startAngle, 90, false, paint);
canvas.drawArc(rect2, 270+startAngle, 90, false, paint);

上面的代码当 startAngle = 0 时,绘制的是一个静态的透明度交替的圆弧。接着要让它转起来。增加代码:

startAngle+=10;
if(startAngle == 180)
startAngle = 0;

事实上后两句也可以不增加,仿照 前文 SurfaceView 绘制旋转动画的例子 用这种求余的思想,(rotate += 48) % 360,把上面角度也弄个 %360,也是可以的。

剩下的事就是让这个东西循环执行了。在 super.onDraw(canvas);这句代码后面加 invalidate();就可以了!透明圆环就转起来了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文