• android圆形图像


    在网上找了一下,最简单的是利用canvas的setXfermode,来控制图片重合部分的显示策略。

    图片混合时,先画的是dst,后画的是src,各种混合的方式如下,其中圆形是dst,正方形是src:


     

    不过网上的一些做法没有考虑到图片为长方形的情况,下面给出我修正后的做法:

    这里我们采用srcin模式,先画透明的圆形即dst,再画原图即src,两个重叠的部分就是我们需要的圆形图了(dstin也可以,就是先画原图,再画透明的圆形)。

    就是先判断宽和高中最大max、最小min,只创建半径为min的透明圆,然后画原图时移到中心去,只画一部分。

      public static Bitmap toCircleBitmap(Bitmap bitmap) {
    
            int min = bitmap.getWidth() > bitmap.getHeight() ? bitmap.getHeight() : bitmap.getWidth();
            int max = bitmap.getWidth() > bitmap.getHeight() ? bitmap.getWidth() : bitmap.getHeight();
    
            Bitmap output = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
            Paint paint = new Paint();
    
            RectF rectF = new RectF(0, 0, min, min);
            canvas.drawOval(rectF, paint);
    
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    
            if (min == bitmap.getWidth()) {
                canvas.drawBitmap(bitmap, 0, (min - max) / 2, paint);
            } else {
                canvas.drawBitmap(bitmap, (min - max) / 2, 0, paint);
            }
            return output;
        }

    对于画圆角,可以用drawRoundRect(rectF, 15, 15, paint);  替代drawOval。

  • 相关阅读:
    [翻译]TempDB剩余空间监视与纠错
    SQL Server 检查SQL连接错误问题的步骤
    SQL 根据父节点查询所有子节点
    ASP.NET 回滚事务
    SQL 根据子节点查询所有父节点
    .Net 夯实基础
    WCF学习笔记(六)WCF基础
    离下班还有几分钟,做个小玩意儿
    c#预处理指令
    .Net垃圾回收
  • 原文地址:https://www.cnblogs.com/xdao/p/android_circle_image.html
Copyright © 2020-2023  润新知