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. NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925

    题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...

  2. TCP Socket通信详细过程

    下面这篇文章是参考"骏马金龙"博客中 不可不知的socket和TCP连接过程 https://www.cnblogs.com/f-ck-need-u/p/7623252.html ...

  3. ADB over Wi-Fi

    ADB over Wi-Fi 1.root $adb root 2.设置tcp端口并重启tcpip服务 $adb shell setprop persist.adb.tcp.port &&am ...

  4. 浅谈Java中static作用--转

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  5. 146 LRU Cache 最近最少使用页面置换算法

    设计和实现一个  LRU(最近最少使用)缓存 数据结构,使它应该支持以下操作: get 和 put .get(key) - 如果密钥存在于缓存中,则获取密钥的值(总是正数),否则返回 -1.put(k ...

  6. Centos 6.5安装MySQL-Python遇到的问题--解决办法一

    系统:CentOS release 6.5 (Final) MySQL版本:mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  Edi ...

  7. KMS算法

    解题:http://hihocoder.com/problemset/problem/1015 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时 ...

  8. 01_C++学习笔记_入门

    1.float类型只能表示数字里面的前6位或者前7位.也就是说c++只能保证float类型的数字的前6位是正确的.如果要求的精度更高的话,请使用double和long double. float精度是 ...

  9. VS2015调用低版本lib库出现“无法解析的外部符号 __snprintf ”问题的解决

    VS2015在调用低版本lib库出现有时会出现“无法解析的外部符号 __snprintf ”的问题,解决方法是加入lib库“legacy_stdio_definitions.lib”到工程.

  10. VBScript(一)

    visual basic Script 好像是以个老掉牙的服务器端脚本语言,低版本的IE浏览器支持在浏览器里执行 几个特点 1. 大小写不敏感 2.在服务器端 inputBox, msgBox不被支持 ...