自定义CircleDrawable:

package top.lc951.myandroid.views;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;/*** @author lichong* 2022年08月01日14:40:45*/
public class CircleDrawable extends BitmapDrawable {private Paint mPaint = new Paint(); // 声明一个画笔对象public CircleDrawable(Context ctx, Bitmap bitmap) {super(ctx.getResources(), bitmap);// 创建一个位图着色器,CLAMP表示边缘拉伸BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mPaint.setShader(shader); // 设置画笔的着色器对象}@Overridepublic void draw(Canvas canvas) {int width = getBitmap().getWidth();int height = getBitmap().getHeight();int radius = Math.min(width, height) / 2 - 4;// 在画布上绘制圆形,也就是只显示圆形内部的图像canvas.drawCircle(width/2, height/2, radius, mPaint);}
}

OvalDrawable:

package top.lc951.myandroid.views;import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;/*** @author lichong* 2022年08月01日14:37:09*/
public class OvalDrawable extends BitmapDrawable {private Paint mPaint =new Paint();public OvalDrawable(Resources res, Bitmap bitmap) {super(res, bitmap);
// 创建一个位图着色器,CLAMP表示边缘拉伸BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mPaint.setShader(shader); // 设置画笔的着色器对象}@Overridepublic void draw(Canvas canvas) {canvas.drawOval(0,0,getBitmap().getWidth(),getBitmap().getHeight(),mPaint);}
}

RoundDrawable:

package top.lc951.myandroid.views;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;import com.example.indicatorlib.utils.Utils;/*** @author lichong* 2022年08月01日14:49:26*/
public class RoundDrawable extends BitmapDrawable {private Paint mPaint = new Paint(); // 声明一个画笔对象private int mRoundRadius; // 圆角的半径public RoundDrawable(Context ctx, Bitmap bitmap) {super(ctx.getResources(), bitmap);// 创建一个位图着色器,CLAMP表示边缘拉伸BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mPaint.setShader(shader); // 设置画笔的着色器对象mRoundRadius = Utils.dp2px(ctx, 30);}@Overridepublic void draw(Canvas canvas) {RectF rect = new RectF(0, 0, getBitmap().getWidth(), getBitmap().getHeight());// 在画布上绘制圆角矩形,也就是只显示圆角矩形内部的图像canvas.drawRoundRect(rect, mRoundRadius, mRoundRadius, mPaint);}
}

借用之前的图片变化BitmapColorModeActivity,添加使用如下:

private String[] colorNameArray = {"原色", "黑白", "底片", "怀旧", "模糊", "圆形剪裁", "椭圆剪裁", "圆角矩形剪裁"};private void initSpinner() {mOriginBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_img06);ArrayAdapter<String> colorAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, colorNameArray);Spinner spinner = findViewById(R.id.spinner);spinner.setAdapter(colorAdapter);spinner.setSelection(0);spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {Bitmap bitmap;switch (position) {case 0:bitmap = mOriginBitmap;break;case 1:bitmap = BitmapUtil.convertBlack(mOriginBitmap); // 转换为黑白效果break;case 2:bitmap = BitmapUtil.convertNegative(mOriginBitmap); // 转换为底片效果break;case 3:bitmap = BitmapUtil.convertOld(mOriginBitmap); // 转换为怀旧效果break;case 4:bitmap = BitmapUtil.convertBlur(mOriginBitmap); // 转换为模糊效果break;case 5:Drawable drawable = new CircleDrawable(BitmapColorModeActivity.this, mOriginBitmap);pictureIv.setImageDrawable(drawable); // 设置图像视图的图形对象return;case 6:Drawable ovalDrawable = new OvalDrawable(BitmapColorModeActivity.this.getResources(), mOriginBitmap);pictureIv.setImageDrawable(ovalDrawable); // 设置图像视图的图形对象return;case 7:Drawable roundDrawable = new RoundDrawable(BitmapColorModeActivity.this, mOriginBitmap);pictureIv.setImageDrawable(roundDrawable); // 设置图像视图的图形对象return;default:bitmap = mOriginBitmap;}pictureIv.setImageBitmap(bitmap);}

【Android】Drawable裁剪圆形、椭圆、圆角矩形图片(89/100)相关推荐

  1. 用JAVA awt实现Image Asset Studio生成圆形或圆角矩形图片功能

    背景 随着Android 7.1推出Round Icon Resources功能(不了解的,可以看Android开发者官网这篇文章Android 7.1 for Developers),圆形Icon应 ...

  2. [Android开发]不操作Bitmap实现圆角ImageView、圆形ImageView,支持添加背景圆形或圆角矩形边框、边框支持渐变色

    一.主要解决的使用场景 1.使用Glide加载图片时,我们往往需要设置加载中和加载失败的图片,app中不同的页面的显示的图片可能是圆形,也可能是圆角矩形图,Glide设置placeholder和err ...

  3. android 布局圆变椭圆,Android实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)...

    一:简介: 在上一篇 这样可以省很多事情,比如测量步骤,以及不需要自己去写设置图片的方法,本文使用Xfermode模式中的DST_IN模式来实现要达到的效果,当然大家也可以采用其他的模式,比如SRC_ ...

  4. Android开发之自定义圆角矩形图片ImageView

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  5. Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  6. Android自定义圆角矩形图片ImageView

    //自定义的圆形的ImageView类的实现代码如下:package com.xc.xcskin.view;import android.content.Context; import android ...

  7. 在Android中绘制圆角矩形图片

    圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形.        先来看一下普通矩形图片的显示,代码很简单,从r ...

  8. Android中绘制圆角矩形图片及任意形状图片

    转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...

  9. 自定义圆角矩形图片/圆形图片

    图片的圆形/圆角矩形的处理方式有很多,网上也有很多例子,最近项目比较清闲,就试着自己写了一个通用的图片处理,可以根据参数的不同自动生成原型图片或者圆角矩形图片的自定义view大致的效果如下图,两个vi ...

  10. Glide加载常用类型图片(带白色边框的圆形图、圆角矩形图片、圆形图片)

    一:依赖包: Glide_github implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com. ...

最新文章

  1. 脉讯发布“社群搜索工具” 助企业精准洞察消费者需求
  2. python编程基础课后答案-中国大学慕课moocPython编程基础课后答案
  3. 计算机硬件人员专业知识技能,2017年江苏省职业学校技能大赛(计算机硬件)竞赛实施方案...
  4. Python入门100题 | 第045题
  5. Liunx文件的属性(权限) 超详细解析
  6. 能够显著降低焦虑的两种方法
  7. Windows Embedded Compact 7开发环境的搭建
  8. nssl1448-小智过马路【模拟】
  9. vsftpd常用操作
  10. 华为Mate X即将于本月上市:5G实测下载速率超1Gbps
  11. python内核_python-在多处理模块中使用所有内核的100%
  12. php _get返回,php如何无刷新获取get返回值
  13. 数据预处理之独热编码
  14. mysql show profiles 使用分析sql 性能
  15. 沟通CTBS金融行业远程接入解决方案
  16. excel按拼音顺序排序_如何在Excel中按字母顺序排序工作表选项卡
  17. ❀论文篇 ❀ 2010-2022,情绪识别(EmotionRecognition)论文
  18. 算法题:岛屿最大面积
  19. 中国不可能有金融危机而只有经济危机
  20. Android 源码 Camera2 预览流程分析一

热门文章

  1. Android 的发展前景
  2. UI基础-九宫格计算-模型|封装
  3. 360云盘关闭,手把手教你用蒲公英搭建私有云
  4. 曾经深深感动我的电影《似是故人来》
  5. C语言三大标准C89,C99和C11
  6. 滴滴终于上市了,38岁程维身家300亿!
  7. ROS2学习笔记(十一)-- ROS2 bag数据记录与回放
  8. Poloniex加密货币交换泄露数据,建议数据安全从SSL证书做起
  9. MOC3061使用手记
  10. 微信社群机器人Java,做社群一定需要用到微信群机器人吗?看这里你就懂了!...