Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片。接下来我们再介绍一种方法。

首先,

自定义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();

  }

  /**

  * 绘制圆角矩形图片

  * @author caizhiming

  */

  @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);

  }

  }

  /**

  * 把资源图片转换成Bitmap

  * @param drawable

  * 资源图片

  * @return 位图

  */

  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无锡妇科费用 http://www.wxbhnkyy39.com

  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;

  }

  }

Android 图片设置圆角 方法之二的更多相关文章

  1. Android 图片设置圆角

    Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片 方法一: 通过第三方框架Glide实现图片显示有圆角,有三种写法如下: 1.1,第一种实现: RequestOptions ...

  2. Java 图片设置圆角(设置边框,旁白)

    /** * 图片设置圆角 * @param srcImage * @param radius * @param border * @param padding * @return * @throws ...

  3. android图片缓存框架Android-Universal-Image-Loader(二)

    http://blog.csdn.net/king_is_everyone/article/details/35595515 这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下: ...

  4. iOS图片设置圆角

    一般我们在iOS开发的过程中设置圆角都是如下这样设置的. imageView.clipsToBounds = YES; [imageView.layer setCornerRadius:]; 这样设置 ...

  5. iOS图片设置圆角性能优化

    问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建了一个简单地UITableVie ...

  6. Android图片压缩上传(二)

    之前有用到libjpeg,还是有一定的局限性,最近用了一个新的方式,效果还是挺不错,随着作者的版本更新,Bug也随之变少,目前项目中运用已上线. 1.之前的方式Android图片压缩,不失真,上线项目 ...

  7. Android怎样设置圆角button

    1. 在res文件夹下的drawable文件夹下新建shape.xml文件 <?xml version="1.0" encoding="utf-8"?&g ...

  8. Android 图片压缩的方法大全

    public static Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in = ne ...

  9. android中设置快捷键方法setShortcut参数的说明

    setShortcut之所以要两个参数来设定两个快捷键是为了应对不同的手机键盘.数字快捷键为12键键盘(0~9,*,#,共12个按键)所准备的.其实我怀疑有这种键盘的手机能装Android么?因为我的 ...

随机推荐

  1. VS2019+ASP.NETCore+图表

    原帖学习踩坑:https://www.cnblogs.com/fzqm-lwz/p/9704973.html,主要根据大佬原帖内容,实现尝试,进行一些修改: 实现方式一:通过标记帮助程序将JS代码传到 ...

  2. Django Views: Dynamic Content

    世味年来薄似纱,谁令骑马客京华. 小楼一夜听春雨,深巷明朝卖杏花. 矮纸斜行闲作草,晴窗细乳戏分茶. 素衣莫起风尘叹,犹及清明可到家. Your Second View: Dynamic Conten ...

  3. zabbix自定义item(v3.4)

    1 添加user key agent.conf UnsafeUserParameters=1 UserParameter=mysql_if_running,sh /app/zabbix/alertsc ...

  4. Caffe实战三(依赖包解析及环境配置)

    前面的文章使用的软件环境是开始时通过apt-get命令所安装的,本文将通过编译源码的方式重新配置一个可迁移的软件环境.(参考:<深度学习 21天实战Caffe> 第五天 Caffe依赖包解 ...

  5. cordova 安卓项目打包 release安装包

    问题描述: 打包安卓项目, 如果是在项目中只是使用debug包的话, 其中的签名方式使用的都是cordova框架本身, 那么每次打包的话, 都会把之前的安装包给覆盖掉. 现在打包做出一个release ...

  6. VB.NET入门 ANDALSO 和OrElse 之于 AND,OR

    Module Module1 Sub Main() Dim x As Integer = 8, y As Integer = 5, z As Integer = 3 Console.WriteLine ...

  7. Java基础学习-一切皆为对象

    一切皆为对象 引用 String s; //s是引用,并不是对象. String s = "asdf" //创建一个引用的同时便进行初始化

  8. Redis基础知识详解(非原创)

    文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...

  9. AS 开发环境配置

    安装时不用设置代理(proxy). 建议选择标准安装,自定义安装容易选掉一些功能.插件. SDK Tools里的(HAXM installer)有时会未安装,安装完需检查(HAXM installer ...

  10. eclipse搭建android开发环境详细步骤

    搭建android应用的开发环境,一套程序下来也是相当繁琐的,这里我整理下一整套详细流程: 1,下载JDK 去oracle官网下载最新版本的jdk,官网地址 http://www.oracle.com ...