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

本文主要是介绍Android开发:ImageView上绘制旋转圆环(透明度不同的旋转圆环,利用canvas.drawArc实现)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

用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();就可以了!透明圆环就转起来了。






这篇关于Android开发:ImageView上绘制旋转圆环(透明度不同的旋转圆环,利用canvas.drawArc实现)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/260176

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4