我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android中的图片圆角怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android中的图片圆角怎么实现

这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧。

Android 开发中,经常需要对图片进行二次处理,比如添加圆角效果 或 显示圆形图片;

方法一

通过第三方框架 Glide 设置圆角效果;

写法1:

RequestOptions options = new RequestOptions().error(R.drawable.img_load_failure).bitmapTransform(new RoundedCorners(30));//图片圆角为30Glide.with(this).load(URL) //图片地址                .apply(options)                .into(ImagView);

写法2:

RequestOptions requestOptions = new RequestOptions();requestOptions.placeholder(R.drawable.ic_launcher_background);requestOptions.circleCropTransform();requestOptions.transforms( new RoundedCorners(30));Glide.with(this).load(URL) //图片地址                .apply(options)                .into(ImagView);

写法3:

RequestOptions options = new RequestOptions().centerCrop() .transform(new RoundTransform(this,30)); Glide.with(this).load(URL) //图片地址                .apply(options)                .into(ImagView);
public class RoundTransform extends BitmapTransformation {     private static float radius = 0f;     public RoundTransform(Context context) {         this(context, 4);     }        public RoundTransform(Context context, int dp) {         super(context);         this.radius = Resources.getSystem().getDisplayMetrics().density * dp;     }        @Override     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {         Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);         return roundCrop(pool, bitmap);     }        private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {         if (source == null) return null;         Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);         if (result == null) {             result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);         }            Canvas canvas = new Canvas(result);         Paint paint = new Paint();         paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));         paint.setAntiAlias(true);         RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());         canvas.drawRoundRect(rectF, radius, radius, paint);         return result;     }        public String getId() {         return getClass().getName() + Math.round(radius);     }        @Override     public void updateDiskCacheKey(MessageDigest messageDigest) {        }}

方法二

自定义ImageView 设置圆角效果;

<ImageView        android:id="@+id/iv"        android:layout_width="300dp"        android:layout_height="300dp"        android:layout_centerHorizontal="true"        />
ImageView iv = findViewById(R.id.iv); Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.fengjing);        Bitmap outBitmap =getRoundBitmapByShader(bitmap, 500,300,20, 3);        iv.setImageBitmap(outBitmap);
public class RoundRectImageView extends ImageView{     private Paint paint;     public RoundRectImageView(Context context) {        this(context,null);    }     public RoundRectImageView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }     public RoundRectImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        paint  = new Paint();    }         @Override    protected void onDraw(Canvas canvas) {        Drawable drawable = getDrawable();        if (null != drawable) {            Bitmap bitmap = getBitmapFromDrawable(drawable);//            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();            Bitmap b = getRoundBitmapByShader(bitmap,getWidth(),getHeight(), 50,0);            final Rect rectclass="lazy" data-src = new Rect(0, 0, b.getWidth(), b.getHeight());            final Rect rectDest = new Rect(0,0,getWidth(),getHeight());            paint.reset();            canvas.drawBitmap(b, rectclass="lazy" data-src, rectDest, paint);         } else {            super.onDraw(canvas);        }    }         public static Bitmap getBitmapFromDrawable(Drawable drawable) {        int width = drawable.getIntrinsicWidth();        int height = drawable.getIntrinsicHeight();        Bitmap bitmap = Bitmap.createBitmap(width, height, drawable                .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888                : Bitmap.Config.RGB_565);        Canvas canvas = new Canvas(bitmap);        //drawable.setBounds(-4, -4, width + 4, height + 4);        drawable.draw(canvas);        return bitmap;    }     public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) {        if (bitmap == null) {            return null;        }        int width = bitmap.getWidth();        int height = bitmap.getHeight();        float widthScale = outWidth * 1f / width;        float heightScale = outHeight * 1f / height;         Matrix matrix = new Matrix();        matrix.setScale(widthScale, heightScale);        //创建输出的bitmap        Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);        //创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上        Canvas canvas = new Canvas(desBitmap);        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);        //创建着色器        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        //给着色器配置matrix        bitmapShader.setLocalMatrix(matrix);        paint.setShader(bitmapShader);        //创建矩形区域并且预留出border        RectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder);        //把传入的bitmap绘制到圆角矩形区域内        canvas.drawRoundRect(rect, radius, radius, paint);         if (boarder > 0) {            //绘制boarder            Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            boarderPaint.setColor(Color.GREEN);            boarderPaint.setStyle(Paint.Style.STROKE);            boarderPaint.setStrokeWidth(boarder);            canvas.drawRoundRect(rect, radius, radius, boarderPaint);        }        return desBitmap;    } }

方法三

对图片进行处理,还可以加边框;

public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) {    if (bitmap == null) {        return null;    }    int height = bitmap.getHeight();    int width = bitmap.getWidth();        float widthScale = outWidth * 1f / width;    float heightScale = outHeight * 1f / height;     Matrix matrix = new Matrix();    matrix.setScale(widthScale, heightScale);    //创建输出的bitmap    Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);    //创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上    Canvas canvas = new Canvas(desBitmap);    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    //创建着色器    BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);    //给着色器配置matrix    bitmapShader.setLocalMatrix(matrix);    paint.setShader(bitmapShader);    //创建矩形区域并且预留出border    RectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder);    //把传入的bitmap绘制到圆角矩形区域内    canvas.drawRoundRect(rect, radius, radius, paint);     if (boarder > 0) {        //绘制boarder        Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        boarderPaint.setColor(Color.GREEN);        boarderPaint.setStyle(Paint.Style.STROKE);        boarderPaint.setStrokeWidth(boarder);        canvas.drawRoundRect(rect, radius, radius, boarderPaint);    }    return desBitmap;}

实现圆形和边框:

public static Bitmap getCircleBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int boarder) {int radius;int width = bitmap.getWidth();int height = bitmap.getHeight();float widthScale = outWidth * 1f / width;float heightScale = outHeight * 1f / height; Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);if (outHeight > outWidth) {    radius = outWidth / 2;} else {    radius = outHeight / 2;}//创建canvasCanvas canvas = new Canvas(desBitmap);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);Matrix matrix = new Matrix();matrix.setScale(widthScale, heightScale);bitmapShader.setLocalMatrix(matrix);paint.setShader(bitmapShader);canvas.drawCircle(outWidth / 2, outHeight / 2, radius - boarder, paint);if (boarder > 0) {    //绘制boarder    Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);    boarderPaint.setColor(Color.GREEN);    boarderPaint.setStyle(Paint.Style.STROKE);    boarderPaint.setStrokeWidth(boarder);    canvas.drawCircle(outWidth / 2, outHeight / 2, radius - boarder, boarderPaint);}return desBitmap;}

关于“Android中的图片圆角怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Android中的图片圆角怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android中的图片圆角怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android中的图片圆角怎么实现

这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧。Android 开发中,经常需要对图片
2023-06-29

Android基于Fresco怎么实现圆角和圆形图片

这篇文章主要介绍“Android基于Fresco怎么实现圆角和圆形图片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android基于Fresco怎么实现圆角和圆形图片”文章能帮助大家解决问题。Fr
2023-06-29

Android怎么实现图片设置圆角形式

这篇文章主要讲解了“Android怎么实现图片设置圆角形式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现图片设置圆角形式”吧!1.自定义的图片圆角形式CircleIma
2023-06-21

Android 实现圆角图片的简单实例

Android 实现圆角图片的简单实例实现效果图:本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出。于是自己自定义了个View,实现图片的圆角以及圆形效果。效果图:Android 圆角图片的实现形
2023-05-31

Android开发实现图片圆角的方法

本文讲述了Android开发实现图片圆角的方法。分享给大家供大家参考,具体如下:Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded int w = myCoolBi
2022-06-06

android 实现圆角图片解决方案

现在我们就来看看怎么样把图片的四角都变成圆形的,为什么要这样做那,如果要是这样界面就会非常的美观,下面我们就来看看代码吧。 java代码: 代码如下: public static Bitmap toRoundCorner(Bitmap b
2022-06-06

Android中怎么对图片进行圆角处理

本篇文章给大家分享的是有关Android中怎么对图片进行圆角处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法一:setXfermode法此种方式就是再new一个相同尺寸的
2023-05-31

Android如何实现图片生成卷角和圆角缩略图的方法

这篇文章给大家分享的是有关Android如何实现图片生成卷角和圆角缩略图的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在 Android 的一些界面中,有时候我们需要为一副图片生成大小为 n * n 的缩略
2023-05-30

Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)

一、前言 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的。实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader。本文直接继承ImageView,使用BitmapS
2022-06-06

css怎么实现图片变成圆角矩形

今天小编给大家分享一下css怎么实现图片变成圆角矩形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.首先,在页面中添加一张
2022-12-16

Android生成带圆角的Bitmap图片

本文实例讲述了Android生成带圆角的Bitmap图片。分享给大家供大家参考。具体如下: 有时候我们在开发Android应用时,会遇到圆角图片的问题,那么,我们如何在Android中用代码来生成圆角Bitmap图片呢?下面这段代码也许能够
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录