• 自定义圆形ImageView(解决Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();报错问题)


    package com.bottle.bottlelilibrary.view;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.PixelFormat;
    import android.graphics.PorterDuff.Mode;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Rect;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    
    /**
     * 自定义ImageView,将图片转换为圆形
     */
    public class XCRoundImageView extends android.support.v7.widget.AppCompatImageView {
    
        private Paint paint;
    
        public XCRoundImageView(Context context) {
            this(context, null);
        }
    
        public XCRoundImageView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public XCRoundImageView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            paint = new Paint();
    
        }
    
        /**
         * 绘制圆形图片
         *
         * @author caizhiming
         */
        @Override
        protected void onDraw(Canvas canvas) {
    
            Drawable drawable = getDrawable();
            if (null != drawable) {
    //            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();//此方法报错
                Bitmap bitmap = drawableToBitmap(drawable);//使用此方法将drawable转换成bitmap
                Bitmap b = getCircleBitmap(bitmap, 14);
                final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());
                final Rect rectDest = new Rect(0, 0, getWidth(), getHeight());
                paint.reset();
                canvas.drawBitmap(b, rectSrc, rectDest, paint);
    
            } else {
                super.onDraw(canvas);
            }
        }
    
        /**
         * 将Drawable转换成bitmap
         *
         * @param drawable
         * @return
         */
        public static Bitmap drawableToBitmap(Drawable drawable) {
    
            int w = drawable.getIntrinsicWidth();
            int h = drawable.getIntrinsicHeight();
            Bitmap.Config config =
                    drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                            : Bitmap.Config.RGB_565;
            Bitmap bitmap = Bitmap.createBitmap(w, h, config);
            //注意,下面三行代码要用到,否则在View或者SurfaceView里的canvas.drawBitmap会看不到图
            Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, w, h);
            drawable.draw(canvas);
    
            return bitmap;
        }
    
        /**
         * 获取圆形图片方法
         *
         * @param bitmap
         * @param pixels
         * @return Bitmap
         * @author caizhiming
         */
        private Bitmap getCircleBitmap(Bitmap bitmap, int pixels) {
            Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                    bitmap.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
    
            final int color = 0xff424242;
    
            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            int x = bitmap.getWidth();
    
            canvas.drawCircle(x / 2, x / 2, x / 2, paint);
            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
            canvas.drawBitmap(bitmap, rect, rect, paint);
            return output;
    
    
        }
    }
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/1925yiyi/p/9429865.html
Copyright © 2020-2023  润新知