zoukankan      html  css  js  c++  java
  • Android 圆形头像 自己动手

    圆形头像DIY

    现在大部分app使用的都是圆形头像,网上开源的也很多,但是有没有考虑过DIY圆形头像呢?下面就自己实现一个,先看下demo展示

      

    第一步:原理解释(图片很丑,原理很真)

       1、画外框圆形,需要使用自定义的颜色画一个圆形,比图片的半径长5dp

     2、自定义圆形画好了后,将我们需要转换成圆形头像的图片画到上面,从中间开始覆盖,得到如下图片

     

     3、中间截取图片,半径设置为:r=min(width,height),圆心设为:cx=width/2,cy=height/2,这样可以从中间开始截取圆形图片

    第二步、代码实现

     1、首先继承ImageView

     2、重写onDraw(Canvas canvas)方法

     3、设置图片缩放类型setScaleType(ScaleType.CENTER_CROP); 中间截取

    具体代码如下:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. @Override  
    2.     protected void onDraw(Canvas canvas) {  
    3.         // super.onDraw(canvas);  
    4.         setScaleType(ScaleType.CENTER_CROP);  
    5.         Drawable drawable = getDrawable();  
    6.   
    7.         if (null == drawable) {  
    8.             return;  
    9.         }  
    10.   
    11.         // 将drawable转换成bitmap==>网上找的  
    12.         Bitmap bitmap = Bitmap  
    13.                 .createBitmap(  
    14.                         drawable.getIntrinsicWidth(),  
    15.                         drawable.getIntrinsicHeight(),  
    16.                         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
    17.                                 : Bitmap.Config.RGB_565);  
    18.   
    19.         Canvas srcCanvas = new Canvas(bitmap);  
    20.   
    21.         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),  
    22.                 drawable.getIntrinsicHeight());  
    23.   
    24.         drawable.draw(srcCanvas);  
    25.   
    26.         float cx = getWidth() / 2;  
    27.         float cy = getHeight() / 2;  
    28.   
    29.         float radius = Math.min(getWidth(), getHeight()) / 2;  
    30.   
    31.         Paint borderPaint = new Paint();  
    32.         borderPaint.setAntiAlias(true);  
    33.         borderPaint.setColor(Color.GREEN);  
    34.   
    35.         canvas.drawCircle(cx, cy, radius, borderPaint);  
    36.   
    37.         // 画图  
    38.         BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP,  
    39.                 TileMode.CLAMP);  
    40.         Paint paint = new Paint();  
    41.         paint.setShader(shader);  
    42.         paint.setAntiAlias(true);  
    43.         canvas.drawCircle(cx, cy, radius - 5, paint);  
    44.   
    45.     }  


    代码只是简单的demo,当然可以定制成通用的CircleImageView,需要根据自己的需求DIY!!

    其他精彩文章文章

    Android KSOAP2调用.net webservice

    jQuery教程(8)-DOM树操作之使用反向插入方法

    android学习笔记(34)使用AlertDialog创建简单对话框

    android学习笔记(33)画廊视图(Gallery)的功能和用法

    android navidgation drawer 在导航抽屉中如何改变List选中项的...

    更多关于android开发文章

  • 相关阅读:
    java 时间操作
    springboot-helloworld 学习02
    springboot-helloworld 学习01
    java知识图谱
    python day100-[day41-45]-5 web-django RESTful架构和DRF入门
    python day100-[day41-45]-4 web-django 前后端分离
    hive mysql count distinct 多列
    hive 导出数据到文件
    使用npm i 编译vue项目出现无法拉取clone github.com中的源文件
    windows环境下elasticsearch安装教程 (版本为7.12.0)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/4203349.html
Copyright © 2011-2022 走看看