绘制圆环其实很简单,有大概以下三种思路. 这里先说网上提到的一种方法。思路是先绘制内圆,然后绘制圆环(圆环的宽度就是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上实现这一功能。我们主要关注三种方法中的第一种,即通过画布(Canvas)进行绘制...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特的视图组件。本主题聚焦于“Android自定义View之几何图形绘制”,特别是如何利用Android的Canvas API来构建维度图表,如模仿京东白...
在Android开发领域,创新的用户界面设计总是能吸引用户的注意力,而“圆环菜单”就是这样一种独特的交互方式。本文将围绕“Android圆环菜单”这一主题,深入探讨其设计原理、实现方法以及在毕业设计中的应用,帮助你...
在Android开发中,自定义View是一项常见的任务,用于创建具有独特视觉效果或功能的组件。本项目名为"Android可控渐变圆环进度条",它模仿了小米安全中心的圆环进度条设计,并允许开发者自定义设置百分比和颜色,以...
1. CustomCircleImageView.java:自定义的圆环ImageView类,包含了绘制圆环和实现动画的方法。 2. CustomPagerAdapter.java:可能是一个自定义的PagerAdapter,用于为ViewPager提供数据并处理页面切换。 3. ...
2. **绘制圆环**:为了实现视觉上的圆环效果,我们可能需要在自定义ViewGroup的` onDraw()`方法中使用` Canvas`进行绘制。这包括绘制圆环背景、分割线和选中项的高亮效果。可以使用` drawCircle()`和` drawArc()`...
在Android开发中,UI设计是至关重要的一环,它直接影响到用户体验和应用的视觉吸引力。本文将探讨如何在Android中实现两种独特的视觉效果:光点模糊渐变的自旋转圆环特效以及水滴波纹特效。这两种特效能为你的应用...
在Android开发中,创建独特且引人入胜的UI组件是提升用户体验的关键。这个项目涵盖了三个重要的知识点:自定义的圆环ImageView、ViewPager的动画切换以及...掌握这些技能将有助于开发者在Android开发领域更上一层楼。
// 在Canvas上绘制圆环 canvas.drawCircle(minSide / 2, minSide / 2, minSide / 2 - ringPaint.getStrokeWidth() / 2, ringPaint); } ``` 以上代码实现了基本的圆框头像功能,但还可以根据需求进一步扩展。例如...
在Android开发中,自定义控件是提升应用独特性和用户体验的重要手段。本示例中,我们探讨的是如何创建一个特定的圆形倒计时控件,它能够以视觉上吸引人的方式展示时间递减。这个控件可以应用于各种场景,如等待加载...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。"Android自定义View-圆环布局"是一个专为实现特定视觉效果和交互设计的项目,它包含了圆圈旋转、圆环拖动...
在Android开发中,创新的用户界面设计总是能吸引用户的注意力,而“圆环菜单”就是这样一种独特的交互元素。本文将深入探讨如何在Android平台上实现一个可跟随手指拖动的圆环形菜单,以及相关的技术要点。 首先,让...
在Android开发中,创新的用户界面设计总是能吸引用户的注意力,而圆环菜单就是这样一种独特且有趣的设计元素。本文将深入探讨如何在Android平台上实现一个圆环菜单,并基于提供的资源"圆环菜单,只有你想不到的,...
在Android中,View是所有UI控件的基类,包括Button、TextView、ImageView等。通过继承View类,可以实现自定义的UI控件。自定义View需要重写onDraw方法,该方法负责绘制View的内容。 圆环颜色选择器的实现 圆环颜色...
这个类将负责绘制圆环以及菜单项。在onDraw()方法中,利用Canvas提供的drawCircle()和drawBitmap()函数,我们可以绘制出基本的圆形结构和菜单图标。同时,需要考虑圆环的半径、颜色、透明度等属性,以便根据需求调整...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建具有独特功能和视觉效果的组件。"类似很多圆环图片头像"这个标题暗示我们要讨论的是一种特殊的自定义View,它用于显示带有圆环效果的...
在这个例子中,开发者可能会使用`drawCircle()`来绘制圆环,然后通过调整角度来实现进度的动态变化。 2. 动画:为了实现圆环的旋转效果,开发者可能使用了`ObjectAnimator`或`ValueAnimator`来平滑地改变进度值,并...
在Android开发中,自定义组件是一项常见的任务,用于实现独特的UI效果以满足用户界面的个性化需求。本案例中,我们关注的是一个特定的自定义组件——"安卓自定义圆环ProgressBar",它是一种视觉上吸引人的进度指示器...
2. 在onDraw()方法中,除了绘制圆形头像,还需要根据`ringRadius`绘制圆环。 3. 使用Handler发送一个Runnable,该Runnable更新`ringRadius`的值,并调用`postInvalidate()`使View重绘。 4. 设置Runnable的执行间隔,...