自定义圆形图片显示控件CircleImageView
2016-03-31 09:59
441 查看
项目中我们经常会碰到需要使用圆形图片的地方,以前我都是直接在代码里面画。这次碰到一个项目需要使用的地方太多了,所以就自己在网上查了一下资料,集合了一些大神写的方法,然后搞了一套非常简单圆形图片显示控件CircleImageVIew。不多说,先贴出这个类的代码
CircleImageView.java
对的,就是这么简单,也不用再去其他地方配置什么值了。
下面贴出我在项目直接在布局文件中使用的代码
然后显示的结果是这样的
如果以后项目再需要一些比较简单的需要圆形图片的地方就可以直接使用了。
CircleImageView.java
package cn.nodemedia.cc.chenzhou.three.ui.view; /** * Created by zhangyabo on 2016/3/31. */ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; 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; public class CircleImageView extends ImageView { public CircleImageView(Context context) { super(context); // TODO Auto-generated constructor stub } public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); } public CircleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } Bitmap b = ((BitmapDrawable)drawable).getBitmap(); if(null == b) { return; } Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0,0, null); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sbmp; if(bmp.getWidth() != radius || bmp.getHeight() != radius) sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); else sbmp = bmp; Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xffa19774; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.parseColor("#BAB399")); canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f, sbmp.getWidth() / 2+0.1f, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(sbmp, rect, rect, paint); return output; } }
对的,就是这么简单,也不用再去其他地方配置什么值了。
下面贴出我在项目直接在布局文件中使用的代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:gravity="center_vertical" android:orientation="horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginTop="8dp"> <TextView android:id="@+id/tv_first_name" android:layout_width="26dp" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:text="A" android:textColor="#000000" android:textSize="24sp" android:visibility="invisible" /> <span style="color:#33cc00;"><cn.nodemedia.cc.chenzhou.three.ui.view.CircleImageView android:id="@+id/imageview_contact_header" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="32dp" android:scaleType="fitXY" android:src="@drawable/test_round_image" /></span> <TextView android:id="@+id/tv_contact_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_weight="1" android:text="白岩松" android:textColor="#4D4D4D" android:textSize="16sp" /> <TextView android:id="@+id/tv_contact_job" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="42dp" android:text="职务" android:textColor="#4D4D4D" android:textSize="14sp" /> </LinearLayout> </LinearLayout>
然后显示的结果是这样的
如果以后项目再需要一些比较简单的需要圆形图片的地方就可以直接使用了。
相关文章推荐
- 关于获取iframe高度不准的问题
- df -i 与df -h 的不同
- seajs的模块标识
- centos下postgresql源码编译安装与主备异步配置
- centos6.5 nginx+tomcat部署
- Android权限分析待读博客
- 一次单元测试讨论引发的奇想
- Source Insight 3.X utf8支持插件震撼发布
- mvc action controller area
- struts2验证出错总是跳转到input
- Toast 多次显示问题
- 在一台服务器上搭建多个项目的SVN
- linux的权限和用户管理
- linenoise 源码分析(一)
- HadoopJob监控
- iphone
- Android网络通信框架LiteHttp2.0 开篇简介和大纲目录
- 回车换行0x0D和0x0A 小谈
- 父div随着子div的高度改变而改变
- 关于sizeof(struct student)的问题