为了账号安全,请及时绑定邮箱和手机立即绑定

如何制作一个圆形的ImageView?

如何制作一个圆形的ImageView?

慕田峪4524236 2019-11-27 14:41:48
我想做这样的事情。这是带有名称和用户图像的列表视图行。我进行了一些搜索,并完成了图像循环,但不是完美的解决方案。任何帮助都会帮助我。我的代码添加到Image Loader类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;}
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您也可以使用此功能...对我有用。


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;

}


查看完整回答
反对 回复 2019-11-27
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这可能不会回答您的问题,但是,作为替代方案,您可以通过在FrameLayout例如一个2 ImageViews中模仿这种效果:一个在底部-这将是图片,一个在顶部-这将是灰色中间有一个圆形的正方形,而圆形的“主体”要透明。

这样,您就不必进行任何位图处理。但是,请选择一种更适合您的需求。


查看完整回答
反对 回复 2019-11-27
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

谢谢您的答复,此事已完成。


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);

//img1.sycdn.imooc.com//5dde1ad8000183d101690160.jpg

使用imageLoader取整图像github.com/nostra13/Android-Universal-Image-Loader创建选项;


 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);

或者,您可以从squre使用Picasso Library。


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时发现了一个问题。如果您未将xml属性android:contentDescription =“ TODO”放在ImageView中。然后UIL显示简单图像。希望大家理解


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 491 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信