如何在圆形中制作ImageView?

我想要做那样的事情

图像在列表视图

这是一个带有名字和用户图像的列表视图行。

我已经做了一些search,并做了圆形的图像,但不是完美的解决scheme。 任何帮助将帮助我。

我的代码添加到图像加载器类

public Bitmap processBitmap(Bitmap bitmap) { int pixels = 0; if (mRound == 0) pixels = 120; else pixels = mRound; Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

谢谢。

你也可以使用这个function…它的工作对我来说..

 public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 50; int targetHeight = 50; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); return targetBitmap; } 

这可能不会回答你的问题,但是,作为一种替代scheme,你可以通过在FrameLayout使用2个ImageView来模仿这种效果:例如底部的一个 – 这将是图片,一个在顶部 – 这将是一个灰色的方形,中间有一圈,圆形的“身体”是透明的。

这样你就不必做任何位图处理。 但是,select一个更适合您的需求。

这是完成感谢答复。

 Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Paint paint = new Paint(); paint.setStrokeWidth(5); Canvas c = new Canvas(circleBitmap); //This draw a circle of Gerycolor which will be the border of image. c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint.setAntiAlias(true); paint.setShader(shader); // This will draw the image. c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2-2, paint); 

在这里输入图像描述

圆形图像使用imageLoader github.com/nostra13/Android-Universal-Image-Loader创build一个选项;

  DisplayImageOptions options = new DisplayImageOptions.Builder() // this will make circle, pass the width of image .displayer(new RoundedBitmapDisplayer(getResources().getDimensionPixelSize(R.dimen.image_dimen_‌​menu))) .cacheOnDisc(true) .build(); imageLoader.displayImage(url_for_image,ImageView,options); 

或者U可以从squre使用毕加索图书馆。

 Picasso.with(mContext).load(URL+b.image) .placeholder(R.drawable.profile) .error(R.drawable.profile) .transform(new RoundedTransformation(50, 4)) .resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size) .centerCrop() .into(v.im_user); 

你可以在这里下载RoundedTrasformation 文件

重要提示:使用UIL时发现一个问题。 如果您没有在ImageView中放入xml属性android:contentDescription =“TODO”。 然后UIL显示简单的图像。 希望大家都明白