bitmpa 设置任意圆角

public class BitmapFillet {

    public static final int CORNER_NONE = 0;
    public static final int CORNER_TOP_LEFT = 1;
    public static final int CORNER_TOP_RIGHT = 1 << 1;
    public static final int CORNER_BOTTOM_LEFT = 1 << 2;
    public static final int CORNER_BOTTOM_RIGHT = 1 << 3;
    public static final int CORNER_ALL = CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
    public static final int CORNER_TOP = CORNER_TOP_LEFT | CORNER_TOP_RIGHT;
    public static final int CORNER_BOTTOM = CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
    public static final int CORNER_LEFT = CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT;
    public static final int CORNER_RIGHT = CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT;


    /**
     * @param bitmap 要转换的bitmap
     * @param roundPx 圆角角度(px)
     * @param corners 圆角位置{@link BitmapFillet.CORNER_ALL}
     * */
    public static Bitmap fillet(Bitmap bitmap, int roundPx,int corners) {
        try {

            bitmap.setHasAlpha(false);
            final int width = bitmap.getWidth();
            final int height = bitmap.getHeight();

            Bitmap paintingBoard = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(paintingBoard);
            canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
            final Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.BLACK);

            //画出4个圆角
            final RectF rectF = new RectF(0, 0, width, height);
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

            //把不需要的圆角去掉
            int notRoundedCorners = corners^CORNER_ALL;
            if ((notRoundedCorners & CORNER_TOP_LEFT) != 0) {
                clipTopLeft(canvas,paint,roundPx,width,height);
            }
            if ((notRoundedCorners & CORNER_TOP_RIGHT) != 0) {
                clipTopRight(canvas, paint, roundPx, width, height);
            }
            if ((notRoundedCorners & CORNER_BOTTOM_LEFT) != 0) {
                clipBottomLeft(canvas,paint,roundPx,width,height);
            }
            if ((notRoundedCorners & CORNER_BOTTOM_RIGHT) != 0) {
                clipBottomRight(canvas, paint, roundPx, width, height);
            }
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

            final Rect src = new Rect(0, 0, width, height);
            final Rect dst = src;
            canvas.drawBitmap(bitmap, src, dst, paint);
            return paintingBoard;
        } catch (Exception exp) {
            return bitmap;
        }
    }

    private static void clipTopLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
        final Rect block = new Rect(0, 0, offset, offset);
        canvas.drawRect(block, paint);
    }

    private static void clipTopRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
        final Rect block = new Rect(width - offset, 0, width, offset);
        canvas.drawRect(block, paint);
    }

    private static void clipBottomLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
        final Rect block = new Rect(0, height - offset, offset, height);
        canvas.drawRect(block, paint);
    }

    private static void clipBottomRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
        final Rect block = new Rect(width - offset, height - offset, width, height);
        canvas.drawRect(block, paint);
    }
}

 

Android Studio中设置圆角的方法有种:使用xml文件设置和使用Java代码动态设置。 1. 使用xml文件设置圆角 在drawable文件夹下新建一个shape.xml文件,然后在文件中添加如下代码: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:radius="10dp"> <solid android:color="#ffffff" /> <corners android:radius="10dp" /> </shape> ``` 其中,android:radius属性表示整个矩形的圆角半径,corners标签中的android:radius属性表示四个角的圆角半径。如果需要单独控制某一个角的显示样式,可单独设置四个角的值,例如: ```xml <corners android:radius="10dp" android:topLeftRadius="0dp" android:topRightRadius="10dp" android:bottomRightRadius="0dp" android:bottomLeftRadius="10dp" /> ``` 2. 使用Java代码动态设置圆角 ```java // 加载图片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); // 创建一个空的Bitmap Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); // 创建一个画布 Canvas canvas = new Canvas(output); // 创建一个画笔 Paint paint = new Paint(); // 创建一个矩形 Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); // 创建一个圆角矩形 RectF rectF = new RectF(rect); // 设置圆角半径 float roundPx = 20; // 绘制圆角矩形 paint.setAntiAlias(true); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); // 设置图像的叠加模式 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); // 绘制图像 canvas.drawBitmap(bitmap, rect, rect, paint); // 显示图像 ImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageBitmap(output); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值