ImageLoader配置圆形图片

简单的配置ImageLoader的圆形设置

public class Displayer extends RoundedBitmapDisplayer {
    public Displayer(int cornerRadiusPixels) {
        super(cornerRadiusPixels);
    }
    // 显示位图
    @Override
    public void display(Bitmap bitmap, ImageAware imageAware,
                        LoadedFrom loadedFrom) {
        imageAware.setImageDrawable(new CircleDrawable(bitmap, margin));
    }

    public static class CircleDrawable extends Drawable {
        private final int margin;
        private final RectF mRect = new RectF();
        private final BitmapShader bitmapShader;
        private final Paint paint;
        private RectF mBitmapRect;

        public CircleDrawable(Bitmap bitmap, int margin) {
            this.margin = 0;
            // 创建着色器
            bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
                    Shader.TileMode.CLAMP);
            mBitmapRect = new RectF(margin, margin, bitmap.getWidth() - margin,
                    bitmap.getHeight() - margin);
            // 设置画笔
            paint = new Paint();
            paint.setAntiAlias(true);
            paint.setShader(bitmapShader);
        }

        // 画圆,覆盖原来的位图
        @Override
        protected void onBoundsChange(Rect bounds) {
            super.onBoundsChange(bounds);
            mRect.set(margin, margin, bounds.width() - margin, bounds.height()
                    - margin);

            // 调整位图,设置该矩阵,转换映射源矩形和目的矩形
            Matrix shaderMatrix = new Matrix();
            shaderMatrix.setRectToRect(mBitmapRect, mRect,
                    Matrix.ScaleToFit.FILL);
            // 设置着色器矩阵
            bitmapShader.setLocalMatrix(shaderMatrix);
        }

        // 画出其边界(通过设置的setBounds)
        @Override
        public void draw(Canvas canvas) {
            canvas.drawRoundRect(mRect, mRect.width()/2 , mRect.height()/2,
                    paint);
        }

        /**
         * 返回此绘制对象的不透明度/透明度 ,返回的值是抽象的格式常数的PixelFormat之一:未知,半透明,透明或不透明
         * */
        @Override
        public int getOpacity() {
            // 半透明
            return PixelFormat.TRANSLUCENT;
        }

        // 设置透明度
        @Override
        public void setAlpha(int alpha) {
            paint.setAlpha(alpha);
        }

        // 彩色滤光片(通过设置setColorFilter)
        @Override
        public void setColorFilter(ColorFilter cf) {
            paint.setColorFilter(cf);
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值