Android开发笔记之:在ImageView上绘制圆环的实现方法

 更新时间:2013年05月28日 10:25:15   作者:  
本篇文章是对Android中在ImageView上绘制圆环的方法进行了详细的分析介绍,需要的朋友参考下
绘制圆环其实很简单,有大概以下三种思路. 这里先说网上提到的一种方法。思路是先绘制内圆,然后绘制圆环(圆环的宽度就是paint设置的paint.setStrokeWidth的宽度),最后绘制外圆。
请看核心源码:
复制代码 代码如下:

<SPAN xmlns="http://www.w3.org/1999/xhtml">package yan.guoqi.rectphoto;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.ImageView;
public class DrawImageView extends ImageView {
 private final Paint paint;
 private final Context context;&nbsp;
 public DrawImageView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  this.context = context;
  this.paint = new Paint();
  this.paint.setAntiAlias(true); //消除锯齿
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.paint.setStyle(Style.STROKE);  //绘制空心圆或 空心矩形
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  int center = getWidth()/2;
  int innerCircle = dip2px(context, 83); //内圆半径
  int ringWidth = dip2px(context, 10);   //圆环宽度

  // 第一种方法绘制圆环
  //绘制内圆
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.paint.setARGB(255, 138, 43, 226);
  this.paint.setStrokeWidth(2);
  canvas.drawCircle(center, center, innerCircle, this.paint);&nbsp;  

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制圆环
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.paint.setARGB(255, 138, 43, 226);
  this.paint.setStrokeWidth(ringWidth);
  canvas.drawCircle(center, center, innerCircle + 1 +ringWidth/2, this.paint);&nbsp;  

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制外圆&nbsp;
  this.paint.setARGB(255, 138, 43, 226);
  this.paint.setStrokeWidth(2);
  canvas.drawCircle(center, center, innerCircle + ringWidth, this.paint);&nbsp;&nbsp;  

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.onDraw(canvas);

 }
 /* 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ 
 public static int dip2px(Context context, float dpValue) { 
  final float scale = context.getResources().getDisplayMetrics().density; 
  return (int) (dpValue * scale + 0.5f); 
 }&nbsp;
}
</SPAN>

总结:
1,这种分三次来绘制的方法,可以将圆环的内圆 圆环 和外圆的颜色设成不一样的,对paint进行三次设置。还可以将绘制圆环的paint透明度设成10左右就会有圆环透明的效果。
2,三次绘制时的canvas.drawCircle圆心都是(center,center),但三次半径确实不一样的。尤其是第二次绘制圆环的时候,半径是innerCircle + 1 +ringWidth/2。这里的加1是第一次外圆paint.setStrokeWidth(2);宽度设成2,也就是说单条线的宽度1。后面的ringWidth/2也是同理。
示例如下(底色是预览摄像头的视频):



相关文章

  • Android使用多线程进行网络聊天室通信

    Android使用多线程进行网络聊天室通信

    这篇文章主要为大家详细介绍了Android使用多线程进行网络聊天室通信,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android状态栏微技巧(推荐)

    Android状态栏微技巧(推荐)

    这篇文章主要介绍了Android状态栏微技巧的相关资料,非常不错,具有参考借鉴价值,需要的朋友一起学习吧
    2016-12-12
  • AndroidStudio4.0日志中文乱码问题

    AndroidStudio4.0日志中文乱码问题

    这篇文章主要介绍了AndroidStudio4.0日志中文乱码问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Android实现简单图片压缩的方法

    Android实现简单图片压缩的方法

    这篇文章主要介绍了Android实现简单图片压缩的方法,详细分析了Android针对图片的读取、缩放及保存等操作技巧,需要的朋友可以参考下
    2016-06-06
  • 深入Android Browser配置管理的详解

    深入Android Browser配置管理的详解

    本篇文章是对Android Browser的配置管理进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android Touch事件分发深入了解

    Android Touch事件分发深入了解

    这篇文章主要为大家详细介绍了Android Touch事件分发,内容很详细,感兴趣的朋友可以参考一下
    2016-04-04
  • Android动画系列之帧动画和补间动画的示例代码

    Android动画系列之帧动画和补间动画的示例代码

    Android 提供三种动画:帧动画、补间动画和属性动画,本篇文章介绍帧动画以及补间动画的使用,属性动画的使用将在后面的文章中分享,那就来复习一下这两种动画的使用吧
    2020-09-09
  • Android实现头像上传功能

    Android实现头像上传功能

    这篇文章主要为大家详细介绍了Android实现头像上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android蓝牙通信聊天实现发送和接受功能

    Android蓝牙通信聊天实现发送和接受功能

    这篇文章主要为大家详细介绍了Android蓝牙通信聊天实现发送和接受功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android9.0 SystemUI 网络信号栏定制修改的流程解析

    Android9.0 SystemUI 网络信号栏定制修改的流程解析

    这篇文章主要介绍了Android9.0 SystemUI 网络信号栏定制修改的流程,本文通过图文实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11

最新评论