android.graphics

关于Bitmap、Drawable、Canvas、Paint的理解

     Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口。

    Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。

    Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。

    Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作(使用带有Matrix参数的drawxxx方法),同时Canvas类还提供了裁剪、选取等操作。

    Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。


关于自定义canvas 和ondarw 方法里的canvas:          

mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

            mCanvas = new Canvas(mBitmap);

            mCanvas.drawColor(Color.RED);

           上面的canvas绘制的颜色 ,是绘制在内存中我们创建的mBitmap上,不会显示在屏幕上;

      @Override
        protected void onDraw(Canvas canvas) {

            mCanvas.drawColor(Color.RED);

        }
        
    }

            图中onDraw方法的第一行绘制的颜色也不会显示在屏幕上, 只有我们在onDraw方法里通过系统给我们的canvas,调用canvas.drawxxx()才会显示在屏幕上;

           通常我们会根据控件大小(或我们想要的大小)在内存中创建bitmap:

            mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);   //指定编码器,8888是最耗内存的,其它可能失去一些特性,比如Alpha通道。  

             mCanvas = new Canvas(mBitmap);

           在该bitmap上完成我们想要效果的绘制:

         mCanvas.drawColor(Color.RED);

         然后在onDraw方法调用canvas.drawBitmap(mBitmap, 0, 0, null),将我们在内存中

          绘制好的bitmap绘制到屏幕上。

二.  关于Xfermode

     

          

          图中为PorterDuffXfermode 所有模式,灵活运用可以实现很多有意思的效果,

          一定要注意:先绘制的为dst,后绘制的为src(setLayerType(LAYER_TYPE_SOFTWARE, null);//关闭硬件加速 因为xfermode 很多特性不支持硬件加速):

          如:

          实现刮刮卡效果:我们先将一个图层,然后设置DstOut,绘制path,那么path经过的地方就将消失,我们的底下的中奖信息就显示出来了。

         实现圆角图片:我们可以先绘制一个圆角矩形,然后设置SrcIn,再绘制图片。

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值