美文网首页
Android Bitmap和Drawable

Android Bitmap和Drawable

作者: 蜡笔小强要学习 | 来源:发表于2021-06-15 15:41 被阅读0次

    Bitmap是什么

    Bitmap是位图信息的存储,即一个矩形图像每个像素的信息的存储器

    Drawble 是什么

    Drawable表示一种可以在Canvas上进行绘制的抽象的概念,它有很多种,常见的如颜色和图片都可以是一个Drawable。

    Bitmap和Drawble互转

    一、Drawable 转换成 Bitmap

    Bitmap bitmap = BitmapFactory.decodeResource(context.getResource, R.drawable.ic_drawable);
    /*Kotlin*/
    bitmap.toDrawble(resources)
    

    二、Bitmap 转换成 Drawble

    /*java*/
    Drawable drawable = new BitmapDrawable(bitmp);
    /*Kotlin*/
    drawable .toBitmap()
    

    调整Bitmap大小

    private static final int IMAGE_WIDTH = 300;
    private static final int IMAGE_HEIGHT = 180;
    
    Bitmap = scaleBitmap = Bitmap.createScaledBitmap(bitmap,IMAGE_WIDTH,IMAGE_HEIGHT ,true);
    

    三、自定义Drawble

    public class CustomDrawable extends Drawable {
        @Override
        public void draw(@NonNull Canvas canvas) {
            
        }
    
        @Override
        public void setAlpha(int alpha) {
    
        }
    
        @Override
        public void setColorFilter(@Nullable ColorFilter colorFilter) {
    
        }
    
        @Override
        public int getOpacity() {
            return PixelFormat.UNKNOWN;
        }
    }
    

    setAlpha 设置透明度
    getOpacity 设置不透明度
    setColorFilter 设置颜色过滤器

    最后上个Demo, 用自定义Drawable实现圆角效果

    public class CircleDrawable extends Drawable {
     
     private Paint mPaint;
     private int mWidth;
     private Bitmap mBitmap;
     
     public CircleDrawable(Bitmap bitmap) {
     mBitmap = bitmap;
     //着色器,设置横向和纵向的着色模式为平铺
     BitmapShader bitmapShader = new BitmapShader(mBitmap,
      Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
     
     mPaint = new Paint();
     mPaint.setAntiAlias(true);
     mPaint.setDither(true);
     mPaint.setShader(bitmapShader);
     mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());
     }
     
     //绘制
     @Override
     public void draw(Canvas canvas) {
     canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);
     }
     
     //设置透明度值
     @Override
     public void setAlpha(int alpha) {
     mPaint.setAlpha(alpha);
     }
     
     //设置颜色过滤器
     @Override
     public void setColorFilter(ColorFilter colorFilter) {
     mPaint.setColorFilter(colorFilter);
     }
     
     //返回不透明度
     @Override
     public int getOpacity() {
     return PixelFormat.TRANSLUCENT;
     }
     
     //返回图片实际的宽高
     @Override
     public int getIntrinsicWidth() {
     return mWidth;
     }
     
     @Override
     public int getIntrinsicHeight() {
     return mWidth;
     }
    }
    

    自定义Bitmap 无法自定义,是final


    bitmap源码

    自定义Drawable作用:可以重用,自定义view模块,简单灵活,减少嵌套,提升性能。

    相关文章

      网友评论

          本文标题:Android Bitmap和Drawable

          本文链接:https://www.haomeiwen.com/subject/txqzeltx.html