如何在圆形中制作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显示简单的图像。 希望大家都明白
- 我如何deviseappcompat-v7工具栏像Theme.AppCompat.Light.DarkActionBar?
- Google GCM服务器返回未经授权的错误401
- 如何在android中以编程方式查找当前正在运行的应用程序?
- 如何将onClick事件传递给它的父母在Android上?
- 发布之前删除所有debugging日志logging调用:有工具可以做到这一点吗?
- 在AppCompat 21中使用Light.DarkActionBar主题更改ActionBar标题文本颜色
- 将像素转换为dp
- Android Studio – mergeDebugResourcesexception
- 我该如何修复放置在工具栏顶部的Android 4.x的微调器样式