Android快速打造超简单CircleImageView
来源:互联网 发布:相册制作软件下载 编辑:程序博客网 时间:2024/05/16 18:00
现在很多项目很多地方都运用上了圆形ImageView显示头像或者图片,android原生的ImageView已经满足不了我很的需求,so我们就自定义个吧!
效果图:
1.首先肯定先继承ImageView,再来几个构造方法,并初始化画笔一支
public class CircleImageView extends ImageView { /*画笔*/ private Paint paint; public CircleImageView(Context context) { super(context); init(); } public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { paint = new Paint(); } }
2.重写onDraw()方法
@Override protected void onDraw(Canvas canvas) { //获取一张图片 Drawable drawable = getDrawable(); /*如果获取src为空*/ if (drawable == null) { return; } if (getWidth() == 0 && getHeight() == 0) { return; } if (!(drawable instanceof BitmapDrawable)) { return; } Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); if (bitmap == null) { return; } }
3.最重要的部分,放心都有备注
private Bitmap circleDraw(Bitmap bitmap) { int radius; int width = this.getWidth(); int height = this.getHeight(); if (width > height) { radius = width; } else { radius = height; } Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); Rect rect = new Rect(0, 0, width, height); /*抗锯齿*/ paint.setAntiAlias(true); paint.setFilterBitmap(true); /*防抖动*/ paint.setDither(true); /*canvas上绘制圆以外的区域为透明度的黑色,圆内区域为透明:*/ canvas.drawARGB(0, 0, 0, 0); canvas.drawCircle(radius / 2, radius / 2, radius / 2, paint); /*详情请参考http://www.cnblogs.com/rayray/p/3670120.html*/ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); /*修改图片大小*/ bitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, true); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }
总体就这样
package com.kekegdsz.www.circleimageview;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;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;/** * Created by Administrator on 2016/10/27. */public class CircleImageView extends ImageView { /*画笔*/ private Paint paint; public CircleImageView(Context context) { super(context); init(); } public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { paint = new Paint(); } @Override protected void onDraw(Canvas canvas) { //获取一张图片 Drawable drawable = getDrawable(); /*如果获取src为空*/ if (drawable == null) { return; } if (getWidth() == 0 && getHeight() == 0) { return; } if (!(drawable instanceof BitmapDrawable)) { return; } Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); if (bitmap == null) { return; } /*主要函数*/ Bitmap circleDraw = this.circleDraw(bitmap); /*清空画笔*/ this.paint.reset(); canvas.drawBitmap(circleDraw, 0, 0, null); } private Bitmap circleDraw(Bitmap bitmap) { int radius; int width = this.getWidth(); int height = this.getHeight(); if (width > height) { radius = width; } else { radius = height; } Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); Rect rect = new Rect(0, 0, width, height); /*抗锯齿*/ paint.setAntiAlias(true); paint.setFilterBitmap(true); /*防抖动*/ paint.setDither(true); /*canvas上绘制圆以外的区域为透明度的黑色,圆内区域为透明:*/ canvas.drawARGB(0, 0, 0, 0); canvas.drawCircle(radius / 2, radius / 2, radius / 2, paint); /*详情请参考http://www.cnblogs.com/rayray/p/3670120.html*/ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); /*修改图片大小*/ bitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, true); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }}
使用:
<com.kekegdsz.www.circleimageview.CircleImageView android:layout_width="100dp" android:src="@drawable/kekegdsz" android:layout_height="100dp" />
源码下载地址:http://download.csdn.net/detail/kekegdsz/9666218
0 0
- Android快速打造超简单CircleImageView
- Android Drawable简介&CircleImageView简单实现
- 超简洁代码实现CircleImageView
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单
- Android 圆形图片 CircleImageView
- Android之CircleImageView
- Android圆形头像CircleImageView
- Android CircleImageView圆形ImageView
- Android CircleImageView圆形ImageView
- Android CircleImageView圆形ImageView
- 手写PE导入表,打造超小快速关机程序
- 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)详解
- EasyIPCamera二次开发---快速打造简单流媒体服务器
- 超简单ListView打造的多级展开菜单
- 超简单方式教你打造原生侧滑菜单
- CircleImageView
- CircleImageView
- 100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何
- 不安全的直接对象引用
- java二叉树非递归之中序遍历
- Linux下如何查找一个函数在哪个库中
- Java map 存取对象
- Android快速打造超简单CircleImageView
- [iOS]仿微博视频边下边播之封装播放器
- JSP表单的发送
- 基于Visual Studio AddIns(插件)的形式开发的C#及JS的代码注释工具
- 命名空间
- 《大话设计模式》-- 第24个 职责链模式
- Java之同步代码块实现取钱实例
- 对于sqldependency类的使用(通过它来监听数据库的变化)
- Bootstrap 元素居中