20行Android代码写一个CircleImageView_Android

一提到弄一个圆形的头像,很多人马上会想到用CircleIamgeView,但其实自己写一个也并不难自己写的部分也就20行代码,主要是用到PoterDuffXfermode来设置两个图层交集区域的显示方式

首先写一个继承自ImageView的控件

public class CircleImageView extends ImageView

 然后创建构造方法

public CircleImageView(Context context, AttributeSet attrs) {
  super(context, attrs);
 }

之后重写onDraw方法

@Override
 protected void onDraw(Canvas canvas) {
  //获得图片的宽度
  int width=getWidth();
  //获得图片的高度
  int height=getHeight();
  //短的二分之一作为半径
  int radius=height>width?width/2:height/2;

  //重新定义的一个画布,这一步很关键
  Paint mPaint = new Paint();
  //抗锯齿
  mPaint.setAntiAlias(true);
  Bitmap bitmap = Bitmap.createBitmap(width,height,
    Bitmap.Config.ARGB_8888);
  Canvas bitmapCanvas = new Canvas(bitmap);
  super.onDraw(bitmapCanvas);

  //圆形的框
  Bitmap cB = Bitmap.createBitmap(width, height,
    Bitmap.Config.ARGB_8888);
  Canvas cCanv = new Canvas(cB);
  //在控件中间画一个
  cCanv.drawCircle(width/ 2, height/ 2, radius,
    mPaint);

  canvas.drawBitmap(bitmap, 0.0f, 0.0f, mPaint);
  //dst是后画的图形
  mPaint.setXfermode(new PorterDuffXfermode(
    PorterDuff.Mode.DST_IN));
  //一定要用之前的画布,不然会出现边角是黑色
  bitmapCanvas.drawBitmap(cB, 0.0f, 0.0f, mPaint);

  //给图形加边框
  Paint paint =new Paint();
  paint.setAntiAlias(true);
  paint.setStyle(Paint.Style.STROKE);
  paint.setStrokeWidth(5);
  paint.setColor(Color.BLACK);
  canvas.drawCircle(width/ 2, height/ 2, radius,
    paint);

 }

一个简单的CircleImageView就做成了,你们还可以把边框弄成一个属性还有配置相应的方法,让使用者更加方便的使用

它的用法也是和ImageView一模一样的

<com.example.jkgeekjk.roadtodevelop3.CircleImageView
  android:layout_width="match_parent"
  android:src="@drawable/avastar"
  android:layout_height="match_parent" />

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 头像
CircleImageView
circleimageview、circleimageview v4、circleimageview使用、circleimageview 边框、circleimageview jar,以便于您获取更多的相关知识。

时间: 2024-11-02 02:03:29

20行Android代码写一个CircleImageView_Android的相关文章

教你20行PHP代码写小偷程序

PHP小偷程序是采集的前身,有了小偷原理才会写采集.这是PHP100创恩IT教育培训给大家上课时候给大家留的作业.随手写了几行大概思路和功能,细节要求采集到里面的邮箱,作者,标题,内容过滤,图片自动下载,入库分类等功能,也供大家参考下: index.php <?php $con = file_get_contents("http://it.sohu.com/s2010/5651/s274087241/index.shtml"); $preg="/·<a href=

Android 代码写控件代替XML简单实例

Android 代码写控件代替XML简单实例 简单的一个Button控件的练习. 实现代码: Button btn = new Button(HandlerToActivity.this); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; param

server-用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中

问题描述 用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中 用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中, 我用的是offices 2010 前台是一个fileupload控件,一个button控件,选择excel文件,点击button按钮,直接把excel表中的内容导入到SQL数据库中.请问怎么实现这个功能?详细一些,谢谢 解决方案 建议你建两个数据库连接,一个连接excel,一个连接sql2008,然后把excel里数据取出来,

界面-java代码 写一个班级管理系统

问题描述 java代码 写一个班级管理系统 在eclipse里面写一个班级信息管理系统的图形界面 首先显示主界面 课程信息管理系统和学生信息管理系统和退出 进入课程信息管理界面 可以进行课程信息的修改.增加.查询.删除.返回主界面.退出: 进入学生信息管理界面 可以进行学生信息的修改.增加.查询.删除.返回主界面.退出: 解决方案 在这种情况下.我觉得你可以去源码网站找,一大堆得兄弟.源码天空?快去吧. 解决方案二: http://blog.sina.com.cn/s/blog_4e97cd62

字符串-java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因

问题描述 java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因 import java.util.Calendar; import java.util.Date; public class Date { public static void main(String[] args) { //以下代码是用来显示系统当前月份的第一天是星期几的 Calendar currentCal = Calendar.getInstance(); currentCal.

只有20行Javascript代码!手把手教你写一个页面模板引擎

AbsurdJS 作者写的一篇教程,一步步教你怎样用 Javascript 实现一个纯客户端的模板引擎.整个引擎实现只有不到 20 行代码.如果你能从头看到尾的话,还能有不少收获的.你甚至可以跟随大牛的脚步也自己动手写一个引擎.以下是全文. 不知道你有木有听说过一个基于Javascript的Web页面预处理器,叫做AbsurdJS.我是它的作者,目前我还在不断地完善它.最初我只是打算写一个CSS的预处理器,不过后来扩展到了CSS和HTML,可以用来把Javascript代码转成CSS和HTML代

18 行 JS 代码编一个倒时器

有时候在生活中,你需要一个JavaScript倒计时时钟,而不是一个末日装置设备.不管你是否有一次约会,销售.促销.或者游戏,你可以受益于使用原生JavaScript构建一个时钟,而不是拿到一个现成的插件.虽然有许多很棒的时钟插件,但如果使用原生 JavaScript 实现,那你将得到以下好处: 代码将是轻量级的,因为它没有依赖关系. 你的网站会表现得更好,因为你不需要加载外部脚本和样式表. 你将会有更高的可控性,因为你将按照想要的时钟行为的方式来创建它(而不是找一个趋向你想法的插件). 所以事

50行Python代码制作一个计算器

简介 在这篇文章中,我将向大家演示怎样向一个通用计算器一样解析并计算一个四则运算表达式.当我们结束的时候,我们将得到一个可以处理诸如 1+2*-(-3+2)/5.6+3样式的表达式的计算器了.当然,你也可以将它拓展的更为强大. 我本意是想提供一个简单有趣的课程来讲解 语法分析 和 正规语法(编译原理内容).同时,介绍一下 PlyPlus,这是一个我断断续续改进了好几年的语法解析 接口.作为这个课程的附加产物,我们最后会得到完全可替代eval()的一个安全的四则运算器. 如果你想在自家的电脑上试试

使用70行Python代码实现一个递归下降解析器的教程_python

 第一步:标记化 处理表达式的第一步就是将其转化为包含一个个独立符号的列表.这一步很简单,且不是本文的重点,因此在此处我省略了很多. 首先,我定义了一些标记(数字不在此中,它们是默认的标记)和一个标记类型:   token_map = {'+':'ADD', '-':'ADD', '*':'MUL', '/':'MUL', '(':'LPAR', ')':'RPAR'} Token = namedtuple('Token', ['name', 'value']) 下面就是我用来标记 `expr`