zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    js调试技巧
    Java编程技巧——构建器
    java设计模式:工厂方法模式(Factory Method)
    23种设计模式导航
    java设计模式:单例模式(Singleton Pattern)
    迭代器与生成器
    装饰器
    文件操作的说明与使用
    函数命名、调用小技巧
    各类型数据的操作方法
  • 原文地址:https://www.cnblogs.com/xdao/p/android_circle_image.html
Copyright © 2011-2022 走看看