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. Vue-CLI3详解

    vue-cli3快速开始 node 安装,略. webpack 安装webpack npm install webpack webpack-cli -g 查看版本 webpack -v vue-cli ...

  2. Maximal Area Quadrilateral CodeForces - 340B || 三点坐标求三角形面积

    Maximal Area Quadrilateral CodeForces - 340B 三点坐标求三角形面积(可以带正负,表示向量/点的不同相对位置): http://www.cnblogs.com ...

  3. 【转载】(0, eval)(‘this’)

    var window = this || (0, eval)('this') 在avalon源码中有这么一行代码,var window = this很容易理解 这里复习一下Global Object: ...

  4. php,json数据传输(无刷新)

    废话不说直接上关键代码: js代码: <script language="javascript"> $(".login").live('click' ...

  5. 猩球StarBall ,一个方便约球的小程序

    扫描小程序码直接进入小程序 猩球StarBall 是一款为热爱运动的人群提供便利的小程序. 开发技术为Java +Mysql 其中用到的技术框架为SpringBoot,Mybatis,Redis,Qu ...

  6. js中传统事件绑定模拟现代事件处理

    大家都知道,IE中的现代事件绑定(attachEvent)与W3C标准的(addEventListener)相比存在很多问题, 例如:内存泄漏,重复添加事件并触发的时候是倒叙执行等. 下面是用传统事件 ...

  7. JS通过使用PDFJS实现基于文件流的预览功能

    需求: 使用JS实现PDF文件预览功能 备选方案: 使用ViewerJS,官网  http://viewerjs.org/ 使用PDFJS,官网  https://mozilla.github.io/ ...

  8. jmeter+ant+jenkins

    前提:需要先配置下面两个环境,严格按照本人的配置去配,要不然后面你会看不懂 (1)ant+jmeter集成:http://blog.csdn.net/qq_23101033/article/detai ...

  9. 测试当前C环境的栈帧增长方向以及传递参数时的压栈顺序

    前文链接:上次由于一个很常见的printf-bug(下文有提及)引发了我对栈的思考,并写下了一点总结.这次就尝试对不同的C环境进行实践,检测其传递参数的一些性质. 这是今天写的检查C环境的一段程序.能 ...

  10. (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互

    http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...