Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai
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相关推荐
- Android开发之自定义圆角矩形图片ImageView
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...
- Android自定义圆角矩形图片ImageView
//自定义的圆形的ImageView类的实现代码如下:package com.xc.xcskin.view;import android.content.Context; import android ...
- 【Android开发】自定义圆角button样式
[Android开发]自定义圆角button样式 结果图 步骤 在res/drawable中新建一个drawable文件,自定义命名为btu.xml; 在btu.xml中设置圆角大小和填充颜色,代码如 ...
- 自定义圆角矩形图片/圆形图片
图片的圆形/圆角矩形的处理方式有很多,网上也有很多例子,最近项目比较清闲,就试着自己写了一个通用的图片处理,可以根据参数的不同自动生成原型图片或者圆角矩形图片的自定义view大致的效果如下图,两个vi ...
- android 使用shape自定义圆角矩形
今天项目中需要用到圆角矩形边框,就自己定义了一个,虽然很简单,但也记录一下. 在eclipse中新建shape文件步骤: 1.选中res下面的drawable目录,点击鼠标右键New->Andr ...
- Android自定义圆角圆形图片
转载请注明出处:http://blog.csdn.net/binbinqq86/article/details/79463977 说起Android里面的自定义圆角圆形图片,已经算是老生常谈的话题了, ...
- 在Android中绘制圆角矩形图片
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形. 先来看一下普通矩形图片的显示,代码很简单,从r ...
- Android中绘制圆角矩形图片及任意形状图片
转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...
- Glide加载常用类型图片(带白色边框的圆形图、圆角矩形图片、圆形图片)
一:依赖包: Glide_github implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com. ...
最新文章
- Django之重定向
- 利用ngxtop实时监控nginx的访问情况
- python读取文件多行内容-python 逐行读取文件的几种方法
- Git存管代码,实例演示
- 使用infinite-scroll实现Ghost博文列表的滚动加载
- top进阶命令htop运用
- 1. 观察者模式总结(C++)
- 实验 2 关键字驱动测试(2 学时)实验报告--软件功能测试与性能测试实验
- [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]
- 让TFS忽略packages文件夹的更改
- 简单介绍Linux进程文件路径的获取方法
- 文件操作--设置文件属性、获取文件属性
- 【数据结构实验】队列的应用
- 数据结构顺序表基本操作(C/C++实现)
- 微信开发者工具测试方法
- canonical的概念用途及用法详细解说,seo不可不看!
- 使用Arduino读取RC接收机PWM信号的三种方式
- 苹果4s怎么越狱_这次是真的!iPhone成功刷入安卓系统,苹果急了......
- Vue+SpringBoot的篮球社区平台
- 国内云服务器哪家好?