Android之画一个圆角图形

本文介绍了如何在Android中通过PorterDuff.Mode属性来创建圆角图形,作者分享了从OpenCamera开源项目中学到的知识,并提供了一段实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看OpenCamera的源码,表示受益很深,项目地址:https://github.com/almalence/OpenCamera

画一个圆角的图,使用PorterDuff.Mode的属性,话不多说,直接上代码


/**
     *  方形圆角图片
     *
     * @param bitmap       图片
     * @param size         要显示的大小,如果需要截图从中心截图
     * @param borderRadius 圆角弧度 到一定值就为圆了
     * @param color        图片边缘颜色
     * @param borderWidth  图片边缘宽度
     * @return
     */
    private Bitmap getRoundedCornerBitmap(Bitmap bitmap, int size, int borderRadius, @ColorInt int color, int borderWidth) {
        final int side = Math.min(bitmap.getWidth(), bitmap.getHeight());

        final Bitmap bitmapCropped = Bitmap.createBitmap(bitmap, (bitmap.getWidth() - side) / 2,
                (bitmap.getHeight() - side) / 2, side, side);

        final Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(output);

        final Paint paint = new Paint();
        final Rect rectSrc = new Rect(0, 0, bitmapCropped.getWidth(), bitmapCropped.getHeight());
        final Rect rect = new Rect(borderWidth, borderWidth, output.getWidth() - borderWidth, output.getHeight() - borderWidth);
        final RectF rectF = new RectF(rect);
        final RectF rectFBorder = new RectF(0, 0, output.getWidth(), output.getHeight());
        final float roundPx = borderRadius;

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//取两层绘制交集,显示上层
        // 第一个Rect 代表要绘制的bitmap 区域,第二个 Rect 代表的是要将bitmap 绘制在屏幕的什么地方
        canvas.drawBitmap(bitmapCropped, rectSrc, rect, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));//取下层非交集部分与上层交集部分
        canvas.drawRoundRect(rectFBorder, roundPx, roundPx, paint);

        return output;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值