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,一般设置成14 * @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; } } 

完成这个自定义类后,就可以使用这个类了,就是把这个当组件在布局中使用即可,比如:

<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.XCRoundRectImageView   android:id="@+id/roundRectImageView"   android:layout_centerInParent="true"   android:layout_width="200dp"   android:layout_height="200dp"   android:src="@drawable/roundimageview"   />      </RelativeLayout>

转载于:https://www.cnblogs.com/Free-Thinker/p/4169352.html

Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai相关推荐

  1. Android开发之自定义圆角矩形图片ImageView

    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. Django之重定向
  2. 利用ngxtop实时监控nginx的访问情况
  3. python读取文件多行内容-python 逐行读取文件的几种方法
  4. Git存管代码,实例演示
  5. 使用infinite-scroll实现Ghost博文列表的滚动加载
  6. top进阶命令htop运用
  7. 1. 观察者模式总结(C++)
  8. 实验 2 关键字驱动测试(2 学时)实验报告--软件功能测试与性能测试实验
  9. [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]
  10. 让TFS忽略packages文件夹的更改
  11. 简单介绍Linux进程文件路径的获取方法
  12. 文件操作--设置文件属性、获取文件属性
  13. 【数据结构实验】队列的应用
  14. 数据结构顺序表基本操作(C/C++实现)
  15. 微信开发者工具测试方法
  16. canonical的概念用途及用法详细解说,seo不可不看!
  17. 使用Arduino读取RC接收机PWM信号的三种方式
  18. 苹果4s怎么越狱_这次是真的!iPhone成功刷入安卓系统,苹果急了......
  19. Vue+SpringBoot的篮球社区平台
  20. 国内云服务器哪家好?

热门文章

  1. Linux搭建Kafka开发环境
  2. html c 中messagebox,Element-Ui组件 MessageBox 弹框
  3. 优质的10个免费icon图标网站
  4. Java封装Hbase类库
  5. 鼠标事件案例--带有hover样式的导航栏、div跟着鼠标移动而移动
  6. 查看docker的tcp连接状态
  7. 单通道的神经网络语音降噪模型
  8. 阿里云产品ODPS的简介和使用方法
  9. 细数人体器官仿生,还有哪些可开发的
  10. python 操作excel实现替换特定内容