• 自定义imageView圆形图片


    package com.pan.util;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    import android.widget.ImageView;
    /**
     * 自定义圆形 ImageView
     * @author 钟买能
     * @version 1.0
     * @since 2014-5-30
     */
    public class RoundImageView extends ImageView {
        
        public RoundImageView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }
    
        public RoundImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
        }
    
        public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
    
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            
            // 获取当前控件的 drawable
            Drawable drawable = getDrawable();
    
            if (drawable == null) {
                return;
            }
    
            // 这里 get 回来的宽度和高度是当前控件相对应的宽度和高度(在 xml 设置)
            if (getWidth() == 0 || getHeight() == 0) {
                return; 
            }
        
            // 画笔
            Paint paint = new Paint();
            // 颜色设置
            paint.setColor(0xff424242);
            // 抗锯齿
            paint.setAntiAlias(true);
            //Paint 的 Xfermode,PorterDuff.Mode.SRC_IN 取两层图像的交集部门, 只显示上层图像。 
            PorterDuffXfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
            // 获取 bitmap,即传入 imageview 的 bitmap
            Bitmap bitmap =  ((BitmapDrawable)drawable).getBitmap() ;
    
            // 标志
            int saveFlags = Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG;
            canvas.saveLayer(0, 0, getWidth(), getHeight(), null, saveFlags);
            
            // 画遮罩,画出来就是一个和空间大小相匹配的圆
            canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth()/2, paint);
            paint.setXfermode(xfermode);
            
            // 空间的大小 /bitmap 的大小 =bitmap 缩放的倍数
            float scaleWidth = ((float) getWidth()) / bitmap.getWidth();
            float scaleHeight = ((float) getHeight()) / bitmap.getHeight();
            
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight); 
            
            //bitmap 缩放
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            
            //draw 上去
            canvas.drawBitmap(bitmap, 0, 0, paint);
    //        paint.setXfermode(null);
            canvas.restore();
    
        }
    
    }
  • 相关阅读:
    「仰望天空和脚踏实地」​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​写出我心(一百四十八)
    Backtrader中文笔记之Analyzers(二次修复)
    Backtrader中文笔记之Tick Data and Resampling
    NumPy学习记录
    mac通过ln创建软连接使用。
    mac电脑Pycharm的书签设置。
    matplotlib学习记录.
    Backtrader中文笔记之Pandas DataFeed Example
    Backtrader中文笔记之Using Indicators(指标)
    chmod
  • 原文地址:https://www.cnblogs.com/8023-itxinde/p/5366559.html
Copyright © 2020-2023  润新知