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. 限制属性绑定(__slots__)

    正常情况下,当定义了一个class并创建实例后,可以给该实例绑定任何属性和方法,这就是动态语言的灵活性 属性和方法是可以直接定义在class中的,但动态绑定允许在程序运行的过程中动态给class加上属 ...

  2. Centos 6.x 搭建 Zabbix Agent 客户端

    如需搭建zabbix server端,请参考:Zabbix-Server配置 环境: Zabbix-Server: Centos 6.8   IP:192.168.126.129    #Zabix- ...

  3. Python入门小练习-001-备份文件

    练习适用于LINUX,类Unix系统,一步一个脚印提高Python . 001. 类Unix系统中用zip命令将文件压缩备份至 /temporary/ 目录下: import os import ti ...

  4. websocket实现群聊

    server # @File: 群聊 from flask import Flask, render_template, request from geventwebsocket.handler im ...

  5. GCD Counting Codeforces - 990G

    https://www.luogu.org/problemnew/show/CF990G 耶,又一道好题被我浪费掉了,不会做.. 显然可以反演,在这之前只需对于每个i,统计出有多少(x,y),满足x到 ...

  6. 模拟 2015百度之星资格赛 1003 IP聚合

    题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...

  7. Kruskal HDOJ 1863 畅通工程

    题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include &l ...

  8. 转 RAC HA 高可用性

    http://www.cnblogs.com/mfrbuaa/p/4089846.html

  9. 147 Insertion Sort List 链表插入排序

    用插入排序对链表进行排序. 详见:https://leetcode.com/problems/insertion-sort-list/description/ Java实现: 链表的插入排序实现原理很 ...

  10. qconshanghai2014

    主题演讲 容器化的云——CohesiveFT首席技术官 Chris Swan 建设强大的工程师文化——Spotify工程总监 Kevin Goldsmith 软件项目变更的管理和生存之道——jClar ...