博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之自定义圆形的ImageView的实现
阅读量:4344 次
发布时间:2019-06-07

本文共 2583 字,大约阅读时间需要 8 分钟。

本文摘自(原文):http://***/Article/3623.

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.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 XCRoundImageView extends ImageView{ private Paint paint ; public XCRoundImageView(Context context) { this(context,null);      } public XCRoundImageView(Context context, AttributeSet attrs) { this(context, attrs,0);      } public XCRoundImageView(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 = getCircleBitmap(bitmap, 14); 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 pixels     * @return Bitmap     * @author caizhiming */ private Bitmap getCircleBitmap(Bitmap bitmap, int pixels) {          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());          paint.setAntiAlias(true);          canvas.drawARGB(0, 0, 0, 0);          paint.setColor(color); int x = bitmap.getWidth();                 canvas.drawCircle(x / 2, x / 2, x / 2, paint);          paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));          canvas.drawBitmap(bitmap, rect, rect, paint); return output;                      }  }

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

 

转载于:https://www.cnblogs.com/lizhanqi/p/5736939.html

你可能感兴趣的文章
POJ 3740 Easy Finding (DLX模板)
查看>>
MySQL 处理重复数据
查看>>
关于typedef的用法总结(转)
查看>>
Linux下安装rabbitmq
查看>>
曹德旺
查看>>
【转】判断点在多边形内(matlab)
查看>>
java基础之集合:List Set Map的概述以及使用场景
查看>>
Python 线程 进程 协程
查看>>
iOS语言中的KVO机制
查看>>
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
查看>>
响应式web设计之CSS3 Media Queries
查看>>
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>