【Android】Drawable裁剪圆形、椭圆、圆角矩形图片(89/100)
自定义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)相关推荐
- 用JAVA awt实现Image Asset Studio生成圆形或圆角矩形图片功能
背景 随着Android 7.1推出Round Icon Resources功能(不了解的,可以看Android开发者官网这篇文章Android 7.1 for Developers),圆形Icon应 ...
- [Android开发]不操作Bitmap实现圆角ImageView、圆形ImageView,支持添加背景圆形或圆角矩形边框、边框支持渐变色
一.主要解决的使用场景 1.使用Glide加载图片时,我们往往需要设置加载中和加载失败的图片,app中不同的页面的显示的图片可能是圆形,也可能是圆角矩形图,Glide设置placeholder和err ...
- android 布局圆变椭圆,Android实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)...
一:简介: 在上一篇 这样可以省很多事情,比如测量步骤,以及不需要自己去写设置图片的方法,本文使用Xfermode模式中的DST_IN模式来实现要达到的效果,当然大家也可以采用其他的模式,比如SRC_ ...
- Android开发之自定义圆角矩形图片ImageView
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...
- Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...
- Android自定义圆角矩形图片ImageView
//自定义的圆形的ImageView类的实现代码如下:package com.xc.xcskin.view;import android.content.Context; import android ...
- 在Android中绘制圆角矩形图片
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形. 先来看一下普通矩形图片的显示,代码很简单,从r ...
- Android中绘制圆角矩形图片及任意形状图片
转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...
- 自定义圆角矩形图片/圆形图片
图片的圆形/圆角矩形的处理方式有很多,网上也有很多例子,最近项目比较清闲,就试着自己写了一个通用的图片处理,可以根据参数的不同自动生成原型图片或者圆角矩形图片的自定义view大致的效果如下图,两个vi ...
- Glide加载常用类型图片(带白色边框的圆形图、圆角矩形图片、圆形图片)
一:依赖包: Glide_github implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com. ...
最新文章
- 脉讯发布“社群搜索工具” 助企业精准洞察消费者需求
- python编程基础课后答案-中国大学慕课moocPython编程基础课后答案
- 计算机硬件人员专业知识技能,2017年江苏省职业学校技能大赛(计算机硬件)竞赛实施方案...
- Python入门100题 | 第045题
- Liunx文件的属性(权限) 超详细解析
- 能够显著降低焦虑的两种方法
- Windows Embedded Compact 7开发环境的搭建
- nssl1448-小智过马路【模拟】
- vsftpd常用操作
- 华为Mate X即将于本月上市:5G实测下载速率超1Gbps
- python内核_python-在多处理模块中使用所有内核的100%
- php _get返回,php如何无刷新获取get返回值
- 数据预处理之独热编码
- mysql show profiles 使用分析sql 性能
- 沟通CTBS金融行业远程接入解决方案
- excel按拼音顺序排序_如何在Excel中按字母顺序排序工作表选项卡
- ❀论文篇 ❀ 2010-2022,情绪识别(EmotionRecognition)论文
- 算法题:岛屿最大面积
- 中国不可能有金融危机而只有经济危机
- Android 源码 Camera2 预览流程分析一