广告
返回顶部
首页 > 资讯 > 精选 >Android中的图片圆角怎么实现
  • 872
分享到

Android中的图片圆角怎么实现

2023-06-29 01:06:39 872人浏览 薄情痞子
摘要

这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧。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 rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());            final Rect rectDest = new Rect(0,0,getWidth(),getHeight());            paint.reset();            canvas.drawBitmap(b, rectSrc, 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中的图片圆角怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Android中的图片圆角怎么实现

本文链接: https://www.lsjlt.com/news/321881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Android中的图片圆角怎么实现
    这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧。Android 开发中,经常需要对图片...
    99+
    2023-06-29
  • Android实现圆角图片的方法
    本文实例为大家分享了Android实现圆角图片的具体代码,供大家参考,具体内容如下 效果图 创建类CustomRoundAngleImageView public class ...
    99+
    2022-11-12
  • Android基于Fresco怎么实现圆角和圆形图片
    这篇文章主要介绍“Android基于Fresco怎么实现圆角和圆形图片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android基于Fresco怎么实现圆角和圆形图片”文章能帮助大家解决问题。Fr...
    99+
    2023-06-29
  • Android怎么实现图片设置圆角形式
    这篇文章主要讲解了“Android怎么实现图片设置圆角形式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现图片设置圆角形式”吧!自定义的图片圆角形式CircleImage...
    99+
    2023-06-21
  • Android基于Fresco实现圆角和圆形图片
    Fresco是FaceBook开源的Android平台图片加载库,可以从网络,从本地文件系统,本地资源加载图片 Fresco本身已经实现了圆角以及圆形图片的功能。 <!--圆形...
    99+
    2022-11-13
  • Android 实现圆角图片的简单实例
    Android 实现圆角图片的简单实例实现效果图:本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出。于是自己自定义了个View,实现图片的圆角以及圆形效果。效果图:Android 圆角图片的实现形...
    99+
    2023-05-31
    android 圆角图片 roi
  • Android中图片圆角三种实现方法
    目录方法一方法二方法三Android 开发中,经常需要对图片进行二次处理,比如添加圆角效果 或 显示圆形图片; 方法一 通过第三方框架 Glide 设置圆角效果; 写法1: Requ...
    99+
    2022-11-13
  • Android实现图片设置圆角形式
    本文实例为大家分享了Android实现图片设置圆角形式的具体代码,供大家参考,具体内容如下 1.自定义的图片圆角形式CircleImageView类 public class C...
    99+
    2022-11-12
  • android 设置圆角图片实现代码
    代码如下: <xml version="1.0" encoding="utf-8"> <LinearLayout xmlns:android="http:/...
    99+
    2022-06-06
    图片 Android
  • android 实现圆角图片解决方案
    现在我们就来看看怎么样把图片的四角都变成圆形的,为什么要这样做那,如果要是这样界面就会非常的美观,下面我们就来看看代码吧。 java代码: 代码如下: public stat...
    99+
    2022-06-06
    图片 解决方案 Android
  • Android开发实现图片圆角的方法
    本文讲述了Android开发实现图片圆角的方法。分享给大家供大家参考,具体如下: Bitmap myCoolBitmap = ... ; // <-- Your bit...
    99+
    2022-06-06
    方法 图片 android开发 Android
  • Android中怎么对图片进行圆角处理
    本篇文章给大家分享的是有关Android中怎么对图片进行圆角处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法一:setXfermode法此种方式就是再new一个相同尺寸的...
    99+
    2023-05-31
    android roi %d
  • js canvas实现圆角图片
    本文实例为大家分享了js canvas实现圆角图片的具体代码,供大家参考,具体内容如下 圆角图片的代码实现: <!DOCTYPE html> <html lan...
    99+
    2022-11-12
  • Android生成带圆角的Bitmap图片
    本文实例讲述了Android生成带圆角的Bitmap图片。分享给大家供大家参考。具体如下: 有时候我们在开发Android应用时,会遇到圆角图片的问题,那么,我们如何在Andr...
    99+
    2022-06-06
    bitmap Android
  • Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)
    一、前言 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的。实现圆角图片的方法其实不少,常见的就是利用Xfermode,...
    99+
    2022-06-06
    view 图片 椭圆 Android
  • CSS3怎么制作圆角图片和椭圆形图片
    这篇文章主要讲解了“CSS3怎么制作圆角图片和椭圆形图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS3怎么制作圆角图片和椭圆形图片”吧!本文实例为大...
    99+
    2022-10-19
  • Android如何实现图片生成卷角和圆角缩略图的方法
    这篇文章给大家分享的是有关Android如何实现图片生成卷角和圆角缩略图的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在 Android 的一些界面中,有时候我们需要为一副图片生成大小为 n * n 的缩略...
    99+
    2023-05-30
    android
  • css怎么实现图片变成圆角矩形
    今天小编给大家分享一下css怎么实现图片变成圆角矩形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2022-12-16
    css
  • html怎么让图片变圆角
    本文小编为大家详细介绍“html怎么让图片变圆角”,内容详细,步骤清晰,细节处理妥当,希望这篇“html怎么让图片变圆角”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。   在c...
    99+
    2022-10-19
  • 怎么布局CSS圆角图片
    小编给大家分享一下怎么布局CSS圆角图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   圆角图片   实例   圆角图...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作