android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪对应的圆角矩形的bitmap,然后在onDraw()进行绘制圆角矩形图片输出。

自定义的圆形的ImageView类的实现代码如下:

package com.xc.xcskin.view;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;/*** 自定义的圆角矩形ImageView,可以直接当组件在布局中使用。* @author caizhiming**/
public class XCRoundRectImageView extends ImageView{private Paint paint;public XCRoundRectImageView(Context context) {  this(context,null);  }  public XCRoundRectImageView(Context context, AttributeSet attrs) {  this(context, attrs,0);  }  public XCRoundRectImageView(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 = ((BitmapDrawable) drawable).getBitmap();  Bitmap b = getRoundBitmap(bitmap, 20);  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);  }  }  /*** 获取圆角矩形图片方法* @param bitmap* @param roundPx,圆角的弧度* @return Bitmap* @author caizhiming*/private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) {  Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),  bitmap.getHeight(), Config.ARGB_8888);  Canvas canvas = new Canvas(output);  final int color = 0xff424242;final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());  final RectF rectF = new RectF(rect);paint.setAntiAlias(true);  canvas.drawARGB(0, 0, 0, 0);  paint.setColor(color);  int x = bitmap.getWidth(); canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  canvas.drawBitmap(bitmap, rect, rect, paint);  return output;  }
}  

注:getRoundBitmap(Bitmap bitmap, int roundPx)中第二个参数为图片的圆角弧度

xml布局文件中直接引用即可:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><com.xc.xcskin.view.XCRoundRectImageViewandroid:id="@+id/roundRectImageView"  android:layout_centerInParent="true" android:layout_width="200dp"   android:layout_height="80dp"android:src="@drawable/roundimageview"/></RelativeLayout>

最后:效果图如下:

Android开发之自定义圆角矩形图片ImageView相关推荐

  1. Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  2. Android自定义圆角矩形图片ImageView

    //自定义的圆形的ImageView类的实现代码如下:package com.xc.xcskin.view;import android.content.Context; import android ...

  3. 【Android开发】自定义圆角button样式

    [Android开发]自定义圆角button样式 结果图 步骤 在res/drawable中新建一个drawable文件,自定义命名为btu.xml; 在btu.xml中设置圆角大小和填充颜色,代码如 ...

  4. 自定义圆角矩形图片/圆形图片

    图片的圆形/圆角矩形的处理方式有很多,网上也有很多例子,最近项目比较清闲,就试着自己写了一个通用的图片处理,可以根据参数的不同自动生成原型图片或者圆角矩形图片的自定义view大致的效果如下图,两个vi ...

  5. android 使用shape自定义圆角矩形

    今天项目中需要用到圆角矩形边框,就自己定义了一个,虽然很简单,但也记录一下. 在eclipse中新建shape文件步骤: 1.选中res下面的drawable目录,点击鼠标右键New->Andr ...

  6. Android自定义圆角圆形图片

    转载请注明出处:http://blog.csdn.net/binbinqq86/article/details/79463977 说起Android里面的自定义圆角圆形图片,已经算是老生常谈的话题了, ...

  7. 在Android中绘制圆角矩形图片

    圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形.        先来看一下普通矩形图片的显示,代码很简单,从r ...

  8. Android中绘制圆角矩形图片及任意形状图片

    转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...

  9. Glide加载常用类型图片(带白色边框的圆形图、圆角矩形图片、圆形图片)

    一:依赖包: Glide_github implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com. ...

最新文章

  1. 全国大学生智能汽车竞赛获奖证书文字
  2. Ext4 MVC CRUD操作
  3. rs 实用工具 (rs.exe) (SSRS)SQL server report service
  4. rabbitmq java 应用实例
  5. Android中SlidingDrawer开发报错You need to use a Theme.AppCompat theme (or descendant) with this activity.
  6. 【知识连载】 如何用钉钉宜搭制定企业疫情防控数字化管理方案
  7. ES11新特性_动态import---JavaScript_ECMAScript_ES6-ES11新特性工作笔记065
  8. 何时弃用 MongoDB?| 技术头条
  9. python中csv库写入表头_python的pandas工具包,保存.csv文件时不要表头的实例
  10. 加州出台严格无人车路测新政:要求各公司尽快申请部署许可
  11. RC952-FXE1-BL用户使用手册(存档)
  12. 主要厂商在大数据领域的布局状况
  13. EPUB电子书专用阅读软件
  14. H12-211数通HCNA题库解析(二)
  15. 浏览器HTML5 写入文件
  16. 《Nature》《Science》封面发表的AI相关文章
  17. 手机参数中的4+64G到底是什么?
  18. KVC原理分析及应用
  19. 微服系列之Feign使用HttpClient和OkHttp网络请求框架
  20. 【论文翻译】UniT: Unified Knowledge Transfer for Any-Shot Object Detection and Segmentation

热门文章

  1. Canal Admin Web-UI 学习
  2. CPU执行程序的原理(简化过程)
  3. 微信公众号二次开发实现自动回复文字,图片,图文功能
  4. java主色调_主色调
  5. c语言怎么读取西门子plc数据,怎样读取西门子PLC中的程序
  6. Android 真机连接本地PC服务器
  7. The number of method references in a .dex file cannot exceed 64K. Error 解决方案
  8. Profile多环境支持
  9. contiki学习笔记(五)ctimer和etimer
  10. 数据防泄密(DLP)系统