绘制圆环其实很简单,有大概以下三种思路. 这里先说网上提到的一种方法。思路是先绘制内圆,然后绘制圆环(圆环的宽度就是paint设置的paint.setStrokeWidth的宽度),最后绘制外圆。
请看核心源码:
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;
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); //消除锯齿
this.paint.setStyle(Style.STROKE); //绘制空心圆或 空心矩形
}
@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); //圆环宽度
// 第一种方法绘制圆环
//绘制内圆
this.paint.setARGB(255, 138, 43, 226);
this.paint.setStrokeWidth(2);
canvas.drawCircle(center, center, innerCircle, this.paint);
//绘制圆环
this.paint.setARGB(255, 138, 43, 226);
this.paint.setStrokeWidth(ringWidth);
canvas.drawCircle(center, center, innerCircle + 1 +ringWidth/2, this.paint);
//绘制外圆
this.paint.setARGB(255, 138, 43, 226);
this.paint.setStrokeWidth(2);
canvas.drawCircle(center, center, innerCircle + ringWidth, this.paint);
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);
}
}
总结:
1,这种分三次来绘制的方法,可以将圆环的内圆 圆环 和外圆的颜色设成不一样的,对paint进行三次设置。还可以将绘制圆环的paint透明度设成10左右就会有圆环透明的效果。
2,三次绘制时的canvas.drawCircle圆心都是(center,center),但三次半径确实不一样的。尤其是第二次绘制圆环的时候,半径是innerCircle + 1 +ringWidth/2。这里的加1是第一次外圆paint.setStrokeWidth(2);宽度设成2,也就是说单条线的宽度1。后面的ringWidth/2也是同理。
示例如下(底色是预览摄像头的视频):
参考:http://blog.csdn.net/xiangjai/article/details/7727528
分享到:
相关推荐
本篇文章是对Android中在ImageView上绘制圆环的方法进行了详细的分析介绍,需要的朋友参考下
ImageView 图片显示样式的几种类型。android:scaleType是控制图片如何resized/moved来匹对ImageView的size。
我实现的思路: 1.继承ImageView类 2.重写onTouchEvent方法,在ACTION_...//代表ImageView上的一点 public class ViewPoint { float x; float y; } //表示一条线 public class Line { ArrayList<ViewPoint> po
The idea of this android library is to give the possibility to display two texts inside the imageitself. These texts could be the title or the description of the image or something else. Also there ...
CaptchaImageView:自定义ImageView生成验证码图片
我的图像视图演示 自定义图像视图, 在 ImageView 的属性中设置悬停效果。 第 1 步:声明样式(my_styles.xml) < /declare-styleable > ... LinearLayout xmlns:android= " http://schemas.android.com/
嵌入式Android项目设计与开发 第四章 基本控件编程 ——图像控件ImageView ImageView ImageView是用于在界面上展示图片的一种控件。 ImageView 应用: 把准备好的图片存放在drawable或mipmap的资源目录中。 在布局中...
android 自定义属性实现 ImageView 透明度渐变效果
该项目用来练习Android布局和点击事件,适用初学者练手。无其他复杂功能,项目直接解压后导入即可运行。
Android应用源码之imageView1_imageView
Android用线程实现ImageView图片变换+可以停止和继续
在imageview上的指定位置添加另一个iamgeview,并实现等比例缩放,图片自适应
Android开发之ImageView通过matrix实现两点缩放和图片拖动,内有较为详细的注释
Android不同形状的ImageView
Android中ImageView实现平铺多张图片Android中实现平铺图片有两种方式:在drawable中定义平铺的Bitmap然后在ImageView中引
android自定义ImageView实现旋转动画
简洁漂亮的Android 圆角、圆形 ImageView。.zip,Android 圆角、圆形 ImageView
android自定义控件 imageview带有check和uncheck两种状态 目前check和uncheck的资源图片是写死的 没有做到xml可配置
19Android-11-imageView.mp4