ImageView设置成圆形

本文介绍两种在安卓中实现圆形图片裁剪的方法。第一种方法通过中央截取正方形并可设置圆角,适用于需要精确控制圆角大小的场景。第二种方法则提供了一种快速获取圆形图片的方式,但图像会偏于上方。两种方法均使用Bitmap和Canvas进行图像处理,通过设置画笔样式和使用PorterDuffXfermode来实现图像的交集显示。
部署运行你感兴趣的模型镜像

转发https://blog.youkuaiyun.com/yangyahuiguo/article/details/52253401?utm_source=blogxgwz2
1.中央截取正方形,可设置圆角

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.testimg);
        //设置bitmap.getWidth()可以获得圆形
        Bitmap bitmap1 = ClipSquareBitmap(bitmap,200,bitmap.getWidth());
        imageView.setImageBitmap(bitmap1);
    public static Bitmap ClipSquareBitmap(Bitmap bmp, int width, int radius) {
        if (bmp == null || width <= 0)
            return null;
        //如果图片比较小就没必要进行缩放了

        /**
         * 把图片进行缩放,以宽高最小的一边为准,缩放图片比例
         * */
        if (bmp.getWidth() > width && bmp.getHeight() > width) {
            if (bmp.getWidth() > bmp.getHeight()) {
                bmp = Bitmap.createScaledBitmap(bmp, (int) (((float) width) * bmp.getWidth() / bmp.getHeight()), width, false);
            } else {
                bmp = Bitmap.createScaledBitmap(bmp, width, (int) (((float) width) * bmp.getHeight() / bmp.getWidth()), false);
            }

        } else {
            width = bmp.getWidth() > bmp.getHeight() ? bmp.getHeight() : bmp.getWidth();
            Log.d("zeyu","宽" + width + ",w" + bmp.getWidth() + ",h" + bmp.getHeight());
            if (radius > width) {
                radius = width;
            }
        }
        Bitmap output = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        //设置画笔全透明
        canvas.drawARGB(0, 0, 0, 0);
        Paint paints = new Paint();
        paints.setColor(Color.WHITE);
        paints.setAntiAlias(true);//去锯齿
        paints.setFilterBitmap(true);
        //防抖动
        paints.setDither(true);

        //把图片圆形绘制矩形
        if (radius <= 0)
            canvas.drawRect(new Rect(0, 0, width, width), paints);
        else //绘制圆角
            canvas.drawRoundRect(new RectF(0, 0, width, width), radius, radius, paints);
        // 取两层绘制交集。显示前景色。
        paints.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        Rect rect = new Rect();
        if (bmp.getWidth() >= bmp.getHeight()) {
            rect.set((bmp.getWidth() - width) / 2, 0, (bmp.getWidth() + width) / 2, width);
        } else {
            rect.set(0, (bmp.getHeight() - width) / 2, width, (bmp.getHeight() + width) / 2);
        }
        Rect rect2 = new Rect(0, 0, width, width);
        //第一个rect 针对bmp的绘制区域,rect2表示绘制到上面位置
        canvas.drawBitmap(bmp, rect, rect2, paints);
        bmp.recycle();
        return output;
    }

2.这种方式也可获得圆形,但是不是以中央为圆心切的,图像偏上方

    public static Bitmap circleBitmap(Bitmap source) {

        int width = source.getWidth();
        Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        canvas.drawCircle(width / 2, width / 2, width / 2, paint);

        //设置图片相交情况下的处理方式
        //setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有:
        //PorterDuff.Mode.SRC_IN 取两层图像交集部分,只显示上层图像
        //PorterDuff.Mode.DST_IN 取两层图像交集部分,只显示下层图像
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

        canvas.drawBitmap(source, 0, 0, paint);

        return bitmap;
    }

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

3GPP无线通信协议集(中文版45份文件) cwts-reports-001系统连接模式下的层间过程.doc cwts-reports-002系统空闲模式下UE过程与连接.doc cwts-reports-002系统空闲模式下UE过程与连接模式下小区重选过程.doc cwts-reports-003无线资源管理 (RRM) 策略.doc cwts-reports-004系统无线资源管理策略.doc cwts-reports-005系统UE无线接入能力.doc cwts-specs-001名词术语.doc cwts-specs-002系统无线接口物理层技术规范:概述.doc cwts-specs-003物理信道和传输信道到物理信道的映射.doc cwts-specs-004复用与信道编码.doc cwts-specs-005扩频与调制.doc cwts-specs-006物理层过程.doc cwts-specs-007物理层测量.doc cwts-specs-008物理层提供的服务.doc cwts-specs-009MAC.doc cwts-specs-010RLC.doc cwts-specs-011PDCP.doc cwts-specs-012广播多点传送控制BMC.doc cwts-specs-013-RRC331.doc cwts-specs-014系统Iu接口技术规范-概述.doc cwts-specs-015系统Iu接口技术规范-层1.doc cwts-specs-016系统Iu接口技术规范:信令传输.doc cwts-specs-017无线接入网络应用部分(RANAP).doc cwts-specs-018Iu接口技术规范-数据传输及传输信令.doc cwts-specs-019用户平面协议.doc cwts-specs-020系统Iub接口技术规范.doc cwts-specs-021系统Iub接口技术规范:层1.doc cwts-specs-022信令传输.doc cwts-specs-023NBAP信令.doc cwts-specs-024用于公共传输信道数据流的数据传输和传输信令.doc cwts-specs-025用于公共传输信道数据流的用户平面协议.doc cwts-specs-026系统Iur接口技术规范:概述.doc cwts-specs-027层1.doc cwts-specs-028信令传输.doc cwts-specs-029RNSAP信令.doc cwts-specs-030用于公共传送信道数据流的数据传输和传输信令.doc cwts-specs-031用于公共传送信道数据流的用户平面协议.doc cwts-specs-032系统IubIur接口技术规范.doc cwts-specs-033系统Iub-Iur接口技术规范.doc cwts-specs-034.doc cwts-specs-036TD-SCDMA-RRC.doc cwts-specs-037.doc cwts-specs-038.doc cwts-specs-039.doc
ATE ATL ATM ATP ATQ ATT ATV ATX ATZ AT&C AT&D AT&F AT&S AT&Z AT&M AT&V AT&W AT+CIMI AT+COPS AT+CFUN AT+CPIN AT+CSQ AT+CPINR AT+CESQ AT+CGDCONT AT+CGDSCONT AT+CGTFT AT+CGATT AT+CGACT AT+CGDATA AT+CGREG AT+CEREG AT+CGCONTRDP AT+CGEQOSRDP AT*DIALMODE AT*AUTOAPN AT*CGDFLT AT+EPIN AT+MSTK AT+MEDCR AT*BAND AT*BANDRD AT*REGOPT AT*AU THReq AT*CGDFAUTH AT$MYFOTA AT*SELECTSIMSLOT AT+SINGLESIM ATO AT+CGMI AT+CGMM AT+CGMR AT+CGSN AT+CSCS AT+WS46 AT+DS AT+GMI AT+GMM AT+GMR AT+GSN AT+GOI AT+GCAP AT+GCI AT+ICF AT+IFC AT+IDSR AT+ASTO ATA ATD ATH AT+CSTA AT+CMOD AT+CVMOD AT+CHUP AT+CBST AT+CRLP AT+CEER AT+CRC AT+CVHU AT+CNUM AT+CREG AT+CLCK AT+CPWD AT+CLIP AT+CLIR AT+COLP AT+CDIP AT+CCFC AT+CCWA AT+CUSD AT+CHLD AT+CAOC AT+CSSN AT+CLCC AT+CPOL AT+CPLS AT+COPN AT+CNAP AT+COLR AT+CSSAC AT+CNEM AT+CPSMS AT+CEDRXS AT+CEDRXRDP AT+CCIOTOPT AT+CPAS AT+CIND AT+CPBS AT+CPBR AT+CPBF AT+CPBW AT*CPBC AT+CCLK AT+CSIM AT+CRSM AT+CACM AT+CAMM AT+CPUC AT+CCWE AT+CLAC AT+CTZU AT+CTZR AT+CGLA AT+CRLA AT+CCHO AT+CCHC AT+CUAD AT+CGPIAF AT+CISRVCC AT+CIREP AT+CEN AT+CAVIMS AT+CPNER AT+CIREG AT+CASIMS AT+CMEE AT+CGQREQ AT+CGQMIN AT+CGEQREQ AT+CGEQMIN AT+CGCMOD AT+CGPADDR AT+CGCLASS AT+CGEREP AT+CGSMS AT+CGSCONTRDP AT+CGTFTRDP AT+CGEQOS AT+CEMODE AT+CSCON AT+CIPCA AT+CNMPSD AT+CEUS AT+CEVDP AT+CMMIVT AT+CABTSR AT+CABTRDP AT+CGAPNRC AT+CDU AT+FCLASS AT+VTS AT+VTD AT+CSUEPOLICY AT+CRUEPOLICY AT+C5GREG AT+C5GQOS AT+C5GNSSAI AT+C5GPNSSAI AT+C5GNSSAIRDP AT*APPSTART AT*SETUEOSID AT*UTTEST AT+C5GCAPA AT+CWUS AT+CLADN AT+CMICO AT*overheat AT*voltagefreq AT*CDNID AT*CAG AT+C5GUSMS AT+C5GURSPQRY AT+Z5GTD AT*TSNCTRL AT+CSMS AT+CPMS AT+CMGF AT+CSMP AT+CSDH AT+CSCB AT+CSAS AT+CRES AT+CNMI AT+CMGL AT+CMGR AT+CMGS AT+CMSS AT+CMGW AT+CSCA AT+CNMA AT+CMGD AT+CMGC AT+CMMS AT AT*SLT AT*PMICREG AT*REGRW AT*RFTEMP AT*RFTEMPEX AT*SSGLPC AT*MORESMS AT*MRD_CDF AT*MRD_IMEI AT*CalInfo AT*MRD_SN AT*L1DEBUG AT*DSPINFO AT+CMUX AT*READVER AT*READCPUUID AT+RESET AT+RSTSET AT+IPR AT+DNS AT$MYPOWEROFF AT$MYSOCKETLED AT$MYGMR AT$MYCCID AT$MYNETURC AT$MYTYPE AT$MYNETCON AT$MYNETACT AT$MYIPFILTER AT$MYNETSRV AT$MYNETOPEN AT$MYNETREAD AT$MYNETWRITE AT$MYNETCLOSE AT$MYNETACK AT$MYNETACCEPT AT$MYNETCREATE AT$MYBCCH AT$MYBAND AT$MYTIMEUPDATE AT$MYLACID AT$MYGPSPOS AT$MYGETKEY AT$MYSYSINFO AT$MYSYSINFOURC AT$MYDOWNLOAD AT^SPN AT+CPIN2 AT*EPIN AT*SIMDETEC AT*EUICC AT+CWRITESIM AT*CLCK AT*MEPCG AT*ENVSIM AT*CNMA AT*RSTMEMFULL AT+CMEMFULL AT*CSCB AT*CBMCS AT*CBRAT AT+CMRSS AT+CMGSS AT+CMSMS AT+CMGMS AT*CMGF AT^LKSMSSTA AT+EEMOPT AT+EEMGINFO AT*PROD AT*POSFUN AT+ATDB AT*TGSINK AT+CGSEND AT*ICSSINK AT+VPDUS AT+VHDL AT+VECHO AT+VDUMP AT*COMMTR AT+LTEPOWER AT*LTETR AT*GSMTR AT*CISCC AT*CIIND AT*IMSSRV AT*POCCMD AT*PRXYSET AT*PRXYRSP AT*CHAPAUTH AT*WIFICTRL AT*NETACT AT*NETREF AT*NETDNS AT*NETIF AT*NETIFCM AT*MPSAPN AT*COMCFG AT*IMLCONFIG AT*ENVCFG AT+ECHUPVT AT$VTS AT*DIALE AT*ECCLIST AT*IMSSRV AT*POCCMD AT*PRXYSET AT*PRXYRSP AT*CHAPAUTH AT*WIFICTRL AT*NETACT AT*NETREF AT*NETDNS AT*NETIF AT*NETIFCM AT*MPSAPN AT*COMCFG AT*IMLCONFIG AT*ENVCFG AT+ECHUPVT AT$VTS AT*DIALE AT*ECCLIST AT*CSCS AT*CCIREG AT^CACAP AT+GETIP AT*NVMFLUSH AT+PEER AT*REJCAUSE AT*CFUN AT*CTZR AT*ADMINDATA AT+CGCI AT+CGOI AT*BANDIND AT*POWERIND AT*FASTDORM AT*CELL AT*BLACKCELL AT+ERGA AT+ERTCA AT*FILETEST AT*CGSN AT*MODEMRESET AT*HTCCTO AT*EHSDPA AT*FDY AT^SYSINFO AT*NASCHK AT+BGLTEPLMN AT*GATR AT*GRIP AT*CGMR AT*CGATT AT*LTECOEX AT*CSQ AT+CPLMNS AT*URSLCT AT*SECCAP AT+OPERCFG AT*PSDC AT+MPBK AT+TRUSTNUM AT+CHKTRUSTNUM AT*FDNBYPASS AT+LOG AT*LWIPCTRL AT*NTP AT*MTU AT*ISIMAID AT^HVER AT+ZDON AT*ASRCOPS AT*ICCID AT*SIMPOLL AT*REGMODE AT+CELLINFO AT*VER AT+PACSP AT*GETIP AT*ROAMINGDATA AT*AUTOTZ AT*DNSCFG AT+AOPS AT+AOPSCFG AT+MSCLASS AT*DELFBPLMN AT*COMFEATURE AT*RESENDPARA AT+CMER AT*CSCO AT+APQUIT AT+wifi AT+sdiophase AT+MIFIMAC AT+FUNC AT+MIFISSID AT+WIFIMIXEDKEY AT+WIFIFUN AT+FLASHBP AT*MRD_SECOND_SN AT+GETCHIPUID AT*VIRTUALICCID AT+UEICCID 以上是我通过AT+CLAC指令返回的信息,给我整理下每个指令的含义
最新发布
12-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值