代码改变世界
[登录 · 注册]
  • 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开发文章

  • 上一篇:android的logcat详细用法
    下一篇:Android混淆代码
  • 【推广】 阿里云小站-上云优惠聚集地(新老客户同享)更有每天限时秒杀!
    【推广】 云服务器低至0.95折 1核2G ECS云服务器8.1元/月
    【推广】 阿里云老用户升级四重礼遇享6.5折限时折扣!
  • 原文:https://www.cnblogs.com/dyllove98/p/4203349.html
走看看 - 开发者的网上家园