当前位置:首页 > 芯闻号 > 充电吧
[导读]之前多次做项目要用圆角图片都去网上找现成的。今天想想不行,还是得自己学会,所以就自定义了一个,集成自ImageView,效果如图: 代码如下:import android.content.Contex


之前多次做项目要用圆角图片都去网上找现成的。

今天想想不行,还是得自己学会,所以就自定义了一个,集成自ImageView,

效果如图:

 

代码如下:


import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.eccic.quicksolve_android.R;

/**
 * Created by eccic on 17/1/3.
 */
public class RoundImageView extends ImageView {
    public RoundImageView(Context context) {
        this(context, null);
    }

    private float cornerRadius = -1;
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public RoundImageView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView);
        for (int i = 0; i < typedArray.getIndexCount(); i++) {
            switch (typedArray.getIndex(i)) {
                case R.styleable.RoundImageView_cornerRadius:
                    cornerRadius = typedArray.getDimension(R.styleable.RoundImageView_cornerRadius, cornerRadius);
                    break;
            }
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (cornerRadius < 0) cornerRadius = Math.min(getWidth(), getHeight()) * 0.5f;
        BitmapDrawable bitmapDrawable = (BitmapDrawable) getDrawable();
        if (bitmapDrawable != null) {
            //步骤1:先生成一个bitmap,在bitmap上绘制原图
            Bitmap bitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_8888);
            Canvas bitmapCanvas = new Canvas(bitmap);
            bitmapDrawable.setBounds(0, 0, getWidth(), getHeight());
            bitmapDrawable.draw(bitmapCanvas);
            //步骤2:生成圆形图片蒙版
            Bitmap mask = Bitmap.createBitmap(getWidth(), getHeight(),Bitmap.Config.ARGB_8888);
            Canvas maskCanvas = new Canvas(mask);
            maskCanvas.drawRoundRect(new RectF(0, 0, getWidth(), getHeight()), cornerRadius, cornerRadius, paint);
            //步骤3:使用DST_IN的方式在原图的bitmap上绘制蒙版图
            paint.reset();
            paint.setFilterBitmap(false);
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
            bitmapCanvas.drawBitmap(mask, 0.0f, 0.0f, paint);
            //步骤4:将最后生成的这个bitmap绘制到View的canvas上
            if (bitmap != null) {
                paint.setXfermode(null);
                canvas.drawBitmap(bitmap, 0.0f, 0.0f, paint);
            }
        }
    }
}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

5 月 28 日(路透社)—— Nvidia (NVDA.O)周二,该公司股价上涨约 6%,创下历史新高,这家人工智能芯片制造商的股票市值距离超越苹果(AAPL.O)仅差约 1000 亿美元,是华尔街最大企业集团的一次重...

关键字: 英伟达 苹果

近日,马斯克谈到了旗下AI初创公司xAI的聊天机器人Grok,声称要将其打造成“又严谨、又追求真理、又是最风趣”的AI聊天机器人,不过他承认,Grok在与OpenAI和Google竞争之前,还需要迎头赶上,马斯克也补充说...

关键字: 马斯克 Grok ChatGPT AI xAI

业内消息,近日超过2000名来自三星电子的工会成员于在韩国首都首尔聚集,举行了一场罕见的集会,要求韩国科技巨头三星电子给予公平加薪。此前三星电子决定今年加薪5.1%,但工会还希望增加1天的年假以及透明的基于绩效的奖金。

关键字: 三星电子

5月26日,华为ICT大赛2023-2024全球总决赛闭幕式暨颁奖典礼在深圳举行。本届大赛为华为历届最大规模的线下比赛,共吸引了全球80多个国家和地区、2000多所院校、17万余名学生报名参赛,经过国家赛、区域赛层层选拔...

关键字: ICT 华为 大赛 人工智能

近日,整数智能与浪潮信息签署元脑生态战略合作协议。双方将秉持协同共生、开放共赢的原则,在元脑生态的框架内开展AI与数据科学领域的深度协作,共同为各行业提供更安全高效的数据管理平台,用智能标注助力数据生产的低成本、高精度、...

关键字: 自动化 人工智能 元脑生态

2024年5月25日,上海市欧美同学会长宁分会与曼彻斯特大学中国中心以"智能向善 AI for good"为主题,联合举办了"第二届人工智能论坛"。人工智能领域的企业家和专家学者发表主题演讲及参与圆桌论坛,逾百余位海归学...

关键字: 人工智能 AI 大语言模型

近日,第一届"和而泰"杯机器人挑战赛暨企业交流日活动在华南理工大学广州国际校区圆满落幕。本次活动由华南理工大学吴贤铭智能工程学院、铭诚书院、超级机器人研究院(黄埔)主办。此次挑战赛旨在提升参赛选手的专业技能,推动跨学科竞...

关键字: 机器人 机器人系统 信息安全 工业机器人

信达生物制药集团(香港联交所股票代码:01801),一家致力于研发、生产和销售肿瘤、自身免疫、代谢及心血管、眼科等重大疾病领域创新药物的生物制药公司,今日宣布其自主研发的重组抗白介素23p19亚基(IL-23p19)抗体...

关键字: SI PGA 信号 IO

进入人工智能时代,数据重要性进一步凸显。今年,国家数据局等17部门联合印发的《"数据要素x"三年行动计划》指出,要以数据驱动发现新规律、创造新知识,加速科学研究范式变革。北京材料基因工程高精尖创新中心在浪潮信息助力下,通...

关键字: 新材料 数据中心 人工智能

在全球 170 个 Digital Realty 数据中心推出解決方案

关键字: 晶片 数据中心
关闭
关闭