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. day04 TimeZone类

  2. decltype使用

    #include<thread> #include<array> #include<iostream> #include<windows.h> #inc ...

  3. python3_linux安装

    python安装包地址 https://www.python.org/ftp/python/ 如果没有c complie,就安装: yum -y install gcc gcc-c++ 在编译安装之前 ...

  4. Android课程设计第四天ListView运用

    注意:课程设计只为完成任务,不做细节描述~ 效果图 <?xml version="1.0" encoding="utf-8"?> <Relat ...

  5. R语言中的并行处理

    网上有人说foreach包可以并行,我就去弄了,结果发现一个普通的二重循环什么事都不错都很卡!捣鼓了半天才发现是foreach的问题 为了提速,做了如下事宜: 直接利用矩阵列加减,不是一个个遍历加 把 ...

  6. Web API性能优化(一)压缩

    简单的应用场景:分页获取日志JSON信息. 很简单的实现,简单的记录一下 未压缩时候 使用PostMan请求http://localhost:34390/api/gpm/syslog/page?pag ...

  7. android开发学习 ------- json数据与实体类之间的相互转换

    在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...

  8. C#实现较为实用的SQLhelper

    第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新 ...

  9. Chrome插件制作

    由于网上很难找到关于Chrome插件制作的中文教程,为了总结和方便更多的开发者,本文以最常见的显示效果为browser_action的二维码插件为例,进行相关阐述.前端童鞋开发的话应该很简单的,鄙人是 ...

  10. fedora kde桌面系统配置

    本文向大家分享个人将fedora操作系统作为工作生活首选桌面系统的一些配置经验,系统版本与fedora最新版本保持一致,当前为fedora 25. #添加rpm源su -c 'dnf install ...