Android开发圆形ImageView实现
效果图如下
1、自定义属性,在value文件夹下新建attrs文件,声明如下属性
<declare-styleable name="CircleImageView"> <attr name="border_color" format="color"/> <attr name="border_width" format="dimension"/> </declare-styleable>
2、继承ImageView ,重写构造和ondraw方法
public class CircleImageView extends AppCompatImageView { private int borderColor; private int borderWidth; private final static int DEFAULT_COLOR = Color.BLACK; private final static int DEFAULT_BORDER_WIDTH = 0; private Paint mPaint; public CircleImageView(Context context) { this(context,null); } public CircleImageView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CircleImageView); borderColor = typedArray.getColor(R.styleable.CircleImageView_border_color, DEFAULT_COLOR); borderWidth = typedArray.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); borderWidth = dp2px(context,borderWidth); mPaint = new Paint(); typedArray.recycle(); } public int dp2px(Context ctx,int dp) { float scale = ctx.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5); } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable != null && drawable instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); Bitmap circleBitmap = getCircleBitmap(bitmap); Rect srcRect = new Rect(0,0,circleBitmap.getWidth(),circleBitmap.getHeight()); Rect dstRect = new Rect(0,0,getWidth(),getHeight()); mPaint.reset(); canvas.drawBitmap(circleBitmap,srcRect,dstRect,mPaint); }else { super.onDraw(canvas); } } private Bitmap getCircleBitmap(Bitmap bitmap) { Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(circleBitmap); mPaint.setAntiAlias(true); canvas.drawARGB(0,255,255,255); mPaint.setColor(borderColor); int radius = bitmap.getWidth() < bitmap.getHeight()? bitmap.getWidth():bitmap.getHeight(); canvas.drawCircle(radius/2,radius/2,radius/2-borderWidth,mPaint); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); Rect rect = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); canvas.drawBitmap(bitmap,rect,rect,mPaint); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); canvas.drawCircle(radius/2,radius/2,radius / 2,mPaint); return circleBitmap; } }
3、引入CircleImageView
<com.mydemo.view.CircleImageView android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/logo" app:border_color="#ffff00" app:border_width="1dp" />
Android开发圆形ImageView实现的更多相关文章
- Android CircleImageView圆形ImageView
Android CircleImageView圆形ImageView CircleImageView是github上一个第三方开源的实现圆形ImageView的项目.其在github上的项目主页 ...
- [转]android 自定义圆形imageview控件
android布局 首先,定义定义圆形Imageview类: import android.content.Context; import android.graphics.Bitmap; imp ...
- Android开发入门——ImageView的设置
在熟悉了android后,总是对系统自带的ic_launcher这个小机器人不太喜欢,想换成自己喜欢的图片,接下来就介绍两种方法来实现把imageView的ic_launcher换成自己喜欢的图片. ...
- Android开发----EditText&ImageView&第三方库的加载
EditText组件 一个实例描述该组件的全部属性(虚假的登录界面) 在activity.xml中 <?xml version="1.0" encoding="ut ...
- Android开发:ImageView阴影和图层效果
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import ...
- Android开发之自定义圆形的ImageView的实现
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然 ...
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- Android开发之自定义圆角矩形图片ImageView的实现
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...
- Android开发ImageView控件缩放图片
首先还是最基础的ImageView控件如何显示图片: <ImageView Android:id="@+id/imgView" ...
随机推荐
- Linux之iptables(一、防火墙的概念)
防火墙的概念 一.安全技术 入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化.定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供 ...
- 2.git进阶篇总结
阅读 Git 原理详解及实用指南 记录 进阶 1 - HEAD.master 与 branch: 介绍了 Git 中的一些「引用」:HEAD.master.branch.这里总结一下: HEAD 是指 ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- Flask-SQLAlchemy中解决1366报错
会报下面这个1366的错 安装MySQL驱动(我升级过Python,所以要再装一遍) 本想安装MySQL官方驱动mysql-connector-python的,然而官方目前只支持到3.4 我又懒,所以 ...
- C#关键字详解第四节
位 Unicode 字符 char在C#中与C语言不同,他表示的是16位无符号进制的数,在计算机中他是被用来存储字符但是他只能用来存 储一个文字,与string不同string可以存储多个文字或字符, ...
- Python 7 列表 for 字典,嵌套
列表: 基本格式:变量名 = [元素1,元素2,元素3] 创建:A = ['访客','admin',19] 或 A = list(['armin','admin',19]), 后者更倾向于转换为 ...
- 清北学堂模拟赛d1t5 拍照(photo)
题目描述 假设这是一个二次元.LYK召集了n个小伙伴一起来拍照.他们分别有自己的身高Hi和宽度Wi.为了放下这个照片并且每个小伙伴都完整的露出来,必须需要一个宽度为ΣWi,长度为max{Hi}的相框. ...
- sql server 学习课件 PPT
http://www.cnblogs.com/woodytu/p/4465288.html
- Spring MVC新手教程(一)
直接干货 model 考虑给用户展示什么.关注支撑业务的信息构成.构建成模型. control 调用业务逻辑产生合适的数据以及传递数据给视图用于呈献: view怎样对数据进行布局,以一种优美的方式展示 ...
- Latex 排版技巧 1——数学公式对齐
在我们排版数学推导式时,非常多时候我们希望可以让公式的等号对齐 这样更接近人的数学推导习惯 例如以下图效果图 使用 begin{aligned} end{aligned}将所需对齐的数学公式代码块包起 ...