在Android中画圆形扇面画图片图片的几种办法

安卓实现绘制由5个不同颜色的圆形组成的图案
来源:&&&& 时间: 12:00 &&&& 作者:琵琶网&&&& 访问量:1723&&&&
&&& 例9.3 在Eclipse中创建Android项目,名称为9.3.实现绘制由5个不同颜色的圆形组成的图案。
&&& (1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TcxtView组件删除。然后添加一个倾布局管理器。用于显示自定义的绘图类。修改后的代码如下:
&&& (2)打开默认创建的MainActivity,在该文件中,创建一个名称为MyVew的内部类,该类继承自android.view.vew类。并添加构造方法和重写onDraw(Canvascanvas)方法,关健代码如下:
&&& (3)在MainActivity的onCreate()方法中,获取布局文件中添加的祯布局管理器,并将步蕊(2)中创建的MyVew视图添加到该帧布局管理器中。
&&& (4)在Mywew的onDrawO方法中,首先指定画布的背景色,然后创建一个采用默认设里的画笔。设里该两笔使用抗锯齿功能,接着设置画笔笔触的宽度,再设置坡充样式为描边,最后设置画笔颜色并绘制圆形。具体代码如下:
&&& 运行本实例,将显示如图9.4所示的运行结果。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
微信扫一扫-礼包攻略通通到手
微信扫一扫关注琵琶网公众号:
1.扫描二维码或搜索微信号,关注“琵琶网手游”;
2.回复“您玩的游戏名称”,即可查看该游戏的最新礼包和资讯;
还没关注的小伙伴,赶紧扫一扫吧~
17996人下载
扫描安装到手机
66334人下载
扫描安装到手机
61048人下载
扫描安装到手机
428878人下载
扫描安装到手机
140747人下载
扫描安装到手机
238949人下载
扫描安装到手机
212812人下载
扫描安装到手机
318605人下载
扫描安装到手机
2729158人下载
扫描安装到手机
1347730人下载
扫描安装到手机
355356人下载
扫描安装到手机
397550人下载
扫描安装到手机
432218人下载
扫描安装到手机
1149215人下载
扫描安装到手机
1406304人下载
扫描安装到手机
355561人下载
扫描安装到手机
521731人下载
扫描安装到手机
527102人下载
扫描安装到手机
5068244人下载过
4646975人下载过
2729158人下载过
2568629人下载过
1535134人下载过
1288867人下载过
949980人下载过
741398人下载过
635030人下载过
318607人下载过Android编程绘制圆形图片的方法
转载 &更新时间:日 09:30:14 & 作者:xurong
这篇文章主要介绍了Android编程绘制圆形图片的方法,结合实例形式较为详细的分析了Android通过自定义控件实现图形绘制的相关技巧,需要的朋友可以参考下
本文实例讲述了Android编程绘制圆形图片的方法。分享给大家供大家参考,具体如下:
效果图如下:
第一步:新建RoundView自定义控件继承View
package com.rong.
import com.rong.test.R;
import android.content.C
import android.graphics.B
import android.graphics.Bitmap.C
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.PorterD
import android.graphics.PorterDuffX
import android.util.AttributeS
import android.widget.ImageV
* 利用Xfermode制作一个圆形图片
* @author 徐荣
public class RoundView extends ImageView {
private Paint mP
public RoundView(Context context, AttributeSet attrs) {
super(context, attrs);
// 初始化画笔
mPaint = new Paint();
mPaint.setAntiAlias(true);
// 拿到原型图
src = BitmapFactory.decodeResource(getResources(), R.drawable.ml);
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// 图片的遮罩,为什么要在这里面初始化遮罩层呢?因为在这个方法里Width()和Height()才被初始化了
mask = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Config.ARGB_4444);
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 设置画布的颜色为透明
canvas.drawColor(Color.TRANSPARENT);
// 划出你要显示的圆
Canvas cc = new Canvas(mask);
cc.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, getMeasuredHeight() / 2, mPaint);
// 这个方法相当于PS新建图层,下面你要做的事就在这个图层上操作
canvas.saveLayer(0, 0, getMeasuredWidth(), getMeasuredHeight(), null, Canvas.ALL_SAVE_FLAG);
// 先绘制遮罩层
canvas.drawBitmap(mask, 0, 0, mPaint);
// 设置混合模式
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
// 再绘制src源图
canvas.drawBitmap(src, 0, 0, mPaint);
// 还原混合模式
mPaint.setXfermode(null);
// 还原画布,相当于Ps的合并图层
canvas.restore();
第二步 新建布局文件Activity_main.xml
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" &
&com.rong.activity.RoundView
android:layout_width="160dp"
android:layout_height="160dp"
android:layout_centerInParent="true" /&
&/RelativeLayout&
更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》
希望本文所述对大家Android程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具不积跬步,无以至千里;不积小流,无以成江海。
Android中图片圆形设置三种方法介绍
Android开发中经常会用到圆形图片,比如在用户头像设置,现在提供三种主要实现方式:
方案一:使用第三方图像框架 Fresco
1、添加依赖
dependencies {
compile 'com.facebook.fresco:fresco:0.14.1'
public class MyApplication extends Application{
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
3、修改 manifest
android:name=".MyApplication"
4、添加网络权限
android:name="android.permission.INTERNET"/&
5、文件布局
需要添加命名空间
xmlns:fresco="http://schemas.android.com/apk/res-auto"
&com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/drawee_img"
fresco:roundAsCircle="true"
fresco:roundedCornerRadius="20dp"
android:layout_width="80dp"
android:layout_height="80dp" /&
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.drawee_img)
Uri uri = Uri.parse("http://p7.qhimg.com/dr/200_200_/t01b2e3a907f6ecc29d.jpg")
draweeView.setImageURI(uri)
方案二:自定义View
public class CircleImageView extends ImageView {
private Paint mP
private int mR
private float mS
public CircleImageView(Context context) {
super(context);
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
mRadius = size / 2;
setMeasuredDimension(size, size);
protected void onDraw(Canvas canvas) {
mPaint = new Paint();
Bitmap bitmap = drawableToBitmap(getDrawable());
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
bitmapShader.setLocalMatrix(matrix);
mPaint.setShader(bitmapShader);
canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);
private Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bd = (BitmapDrawable)
return bd.getBitmap();
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, w, h);
drawable.draw(canvas);
&mgzxc.cn.module2.CircleImageView
android:id="@+id/image1"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:scaleType="centerCrop"
android:src="@drawable/gangtiexia"
方案三:进行图片剪切
public static Bitmap createCircleImage(Bitmap source) {
int length = source.getWidth() & source.getHeight() ? source.getWidth() : source.getHeight()
Paint paint = new Paint()
paint.setAntiAlias(true)
Bitmap target = Bitmap.createBitmap(length, length, Bitmap.Config.ARGB_8888)
Canvas canvas = new Canvas(target)
canvas.drawCircle(length / 2, length / 2, length / 2, paint)
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN))
canvas.drawBitmap(source, 0, 0, paint)
return target
public static Bitmap createCircleImage(Bitmap source) {
int width = source.getWidth();
int height = source.getHeight();
float raduis = Math.min(width, height) * 0.5f;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
Bitmap bitmap = Bitmap.createBitmap(width, height, source.getConfig());
Canvas canvas = new Canvas(bitmap);
canvas.drawCircle(width * 0.5f, height *0.5f, raduis, paint);
return bitmap;
与Picasso结合使用:
Picasso.with(mContext).load(Constant.format(headUrl)).transform(new Transformation() {
public Bitmap transform(Bitmap source) {
source=createCircleImage(source);
source.recycle();
public String key() {
Log.d(TAG, "key() called");
return "key";
}).into(meHeader);
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
在android中画圆形图片的几种办法
摘要:在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器获取到的图片都是方形的。这时候就需要我们自己进行处理,将图片处理成所需要的形状。正如茴香豆的的“茴”写法大于一种,经过我的研究,画出特殊图片的方法也不是一种,我发现了三种,且听我一一道来。使用Xfermode两图相交方式通过查找资料发现android中可以设置画笔的Xfermode即相交模式,从而设置两张图相交之后的显示方式,具体模式见下图
在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器获取到的图片都是方形的。这时候就需要我们自己进行处理,将图片处理成所需要的形状。正如茴香豆的的“茴”写法大于一种,经过我的研究,画出特殊图片的方法也不是一种,我发现了三种,且听我一一道来。
使用Xfermode 两图相交方式
通过查找资料发现android中可以设置画笔的Xfermode即相交模式,从而设置两张图相交之后的显示方式,具体模式见下图,源码可以去android apidemo。(SRC 为我们要画到目标图上的图即原图,DST为目标图)
由上图可以看到,如果我们需要画一个圆形的图,可以在画布上面先画一个跟目标大小一样的圆,然后xfermode选择SRC_IN,再讲我们的头像或者其他图画上去就可以了。同样也可以先画我们的图,再画圆,不过xfermode要选择DST_IN。两种都可以实现我们需要的效果。示例代码如下: Paint p = new Paint();p.setAntiAlias(true); //去锯齿p.setColor(Color.BLACK);p.setStyle(Paint.Style.STROKE);Canvas canvas = new Canvas(bitmap); //bitmap就是我们原来的图,比如头像p.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); //因为我们先画了图所以DST_INint radius = bitmap.getW //假设图片是正方形的canvas.drawCircle(radius, radius, radius, p); //r=radius, 圆心(r,r)
以上就是简单的示例,根据以上的16种模式你其实还可以做出更多效果。另外,只要你给一张相交图,那张图形状什么样,我们的图就可以显示成什么样。
通过裁剪画布区域实现指定形状的图形
Android中Canvas提供了ClipPath, ClipRect, ClipRegion 等方法来裁剪,通过Path, Rect ,Region 的不同组合,Android几乎可以支持任意形状的裁剪区域。因此,我们几乎可以获取任意形状的区域,然后在这个区域上画图,就可以获得,我们要的图片了,直接看示例。 int radius = src.getWidth() / 2; //src为我们要画上去的图,跟上一个示例中的bitmap一样。Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);Canvas c = new Canvas(dest);Paint paint = new Paint();paint.setColor(Color.BLACK);paint.setAntiAlias(true);Path path = new Path();path.addCircle(radius, radius, radius, Path.Direction.CW);c.clipPath(path); //裁剪区域c.drawBitmap(src, 0, 0, paint); //把图画上去
使用BitmapShader
直接先看示例 int radius = src.getWidth() / 2;BitmapShader bitmapShader = new BitmapShader(src, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);Canvas c = new Canvas(dest);Paint paint = new Paint();paint.setAntiAlias(true);paint.setShader(bitmapShader);c.drawCircle(radius,radius, radius, paint);
Shader就是画笔的渲染器,本质上这中方法其实是画圆,但是渲染采用了我们的图片,然后就可以获得指定的形状了。但是我觉得,这个不适合画很复杂的图形,但是在内存消耗上,应该比第一种小很多。同时呢,设置Shader.TileMode.MIRROR,还可以实现镜面效果,也是极好的。
上面就是实现的三种方法,三种方法都可以画很多的形状,当然遇到非常非常非常非常复杂的情况,我是建议使用第一种,这时候可以让美工给一张末班形状图,省自己去代码绘制了。大家根据自己的需求选择。
在github上面CustomShapeImageView就是用了我们所说的第一种方法绘制。RoundedImageView&和CircleImageView则使用bitmapshader完成,当然可能还有一些其他的控件,也许还有其他的一些实现方法,如果你知道,可以回复告诉我^_^。
原文地址:http://blog.isming.me//draw-circle-image-in-android/,转载请注明出处。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
在android中画圆形图片的几种办法相关信息,包括
的信息,所有在android中画圆形图片的几种办法相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International共同学习 共同提高
android绘制圆形图片、圆圈以及图片缩放
这两天做开发,需要将图片资源做成圆形,并且要对图片进行缩放,研究了半天,终于整出来了,效果如下:
代码如下:
package com.android.
import android.content.C
import android.graphics.*;
import android.graphics.Bitmap.C
import android.graphics.PorterDuff.M
import android.graphics.drawable.BitmapD
import android.graphics.drawable.D
import android.util.AttributeS
import android.view.V
import android.widget.ImageV
import com.android.contacts.R;
import android.util.L
* Created with IntelliJ IDEA.
* User: XXXXXX
* Module: XXXXXXX
* Date: 13-9-24
* Time: 上午11:31
public class CircleImageView extends ImageView implements View.OnClickListener {
private static final String TAG = "CircleImageView";
private Paint mPaint = new Paint();
private static final int STROKE_WIDTH = 8;
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
protected void onFinishInflate() {
super.onFinishInflate();
setOnClickListener(this);
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (null != drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
Bitmap b = circleBitmap(scaleBitmap(bitmap));
final Rect rect = new Rect(0, 0, b.getWidth(), b.getHeight());
mPaint.reset();
canvas.drawBitmap(b, rect, rect, mPaint);
super.onDraw(canvas);
// 将矩形图片绘制成圆形图片并在最外围画一圈白色
private Bitmap circleBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff000000;
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
mPaint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
mPaint.setColor(color);
final int width = bitmap.getWidth();
canvas.drawCircle(width / 2, width / 2, width / 2, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, mPaint);//将图片绘制成白色图片
//画白色圆圈
mPaint.reset();
mPaint.setColor(Color.WHITE);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(STROKE_WIDTH);
mPaint.setAntiAlias(true);
canvas.drawCircle(width / 2, width / 2, width / 2 - STROKE_WIDTH / 2, mPaint);
* change the bitmap size
* @param src : Bitmap source
* @return : The scaled bitmap
private Bitmap scaleBitmap(Bitmap src) {
int width = src.getWidth();//原来尺寸大小
int height = src.getHeight();
final float destSize = this.getWidth();//缩放到这个大小//图片缩放比例,新尺寸/原来的尺寸
float scaleWidth = ((float) destSize) /
float scaleHeight = ((float) destSize) /
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);//返回缩放后的图片
return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);
public void onClick(View v) {
//To change body of implemented methods use File | Settings | File Templates.
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 圆形山水画图片大全 的文章

 

随机推荐