美文网首页
ddu-Drawable

ddu-Drawable

作者: 小董666 | 来源:发表于2016-08-29 17:03 被阅读0次
    一、Drawable简介

    Drawable有很多种,它们都表示一种可以在Canvas上进行绘制的图像概念,但是它们又不全是图片,通过颜色也可以构造出各式各样的图像效果。Drawable使用简单,比自定义view的成本要低。另外,非图片类型的Drawable占用空间较小,这对减小apk的大小也有帮助。
    在实际开发中,Drawable常被用作View的背景或者作为ImageView中的图像显示。Drawable一般都是通过XML来定义的,也可以通过代码构造。

    二、Canvas

    画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。Canvas主要用于2D绘图,那么它也提供了很多相应的drawXxx()方法,方便我们在Canvas对象上画画,drawXxx()具有多种类型,可以画出:点、线、矩形、圆形、椭圆、文字、位图等的图形,这里就不再一一介绍了,只介绍几个Canvas中常用的方法:
    void drawBitmap(Bitmap bitmap,float left,float top,Paint paint):
    android系统不允许直接修改原图,类似Photoshop中的锁定,必须通过原图创建一个同样大小的Bitmap,并将原图绘制到该Bitmap中,以一个副本的形式来修改图像。代码如下,bm为原图,bmp为创建的副本。

        canvas.drawBitmap(bm,0,0,paint);
    

    三、Paint

    我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式,主要用于设置绘图风格,包括画笔颜色、画笔粗细、填充风格等。如果涉及一些Android游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。 Paint中提供了大量设置绘图风格的方法,这里仅列出一些常用的:
    setARGB(int a,int r,int g,int b):设置ARGB颜色。
    setColor(int color):设置颜色。
    setAlpha(int a):设置透明度。
    setPathEffect(PathEffect effect):设置绘制路径时的路径效果。
    setShader(Shader shader):设置Paint的填充效果。
    setAntiAlias(boolean aa):设置是否抗锯齿。
    setStrokeWidth(float width):设置Paint的笔触宽度。
    setStyle(Paint.Style style):设置Paint的填充风格。
    setTextSize(float textSize):设置绘制文本时的文字大小。
    setXfermode(Xfermode xfermode):设置绘制的渲染模式

    四、Drawable、Bitmap、Canvas、Paint之间区别

    • (1)Bitmap 转化为 byte

      ByteArrayOutputStream out = new ByteArrayOutputStream();
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
      byte[] array= out.toByteArray();
      
    • (2)byte转化为bitmap

           private Bitmap Bytes2Bimap(byte[] b){
          if(b.length!=0){
             return BitmapFactory.decodeByteArray(b, 0, b.length);
          }
          else {
             return null;
          }
       }
      
    • (3)bitmap 转换 drawable

          Bitmap bitmap = new Bitmap(...);
          Drawable drawable = new BitmapDrawable(bitmap);
      
    • (4)Drawable to Bitmap

        public static Bitmap drawableToBitmap(Drawable drawable) {
      

      Bitmap bitmap = Bitmap.createBitmap(
      drawable.getIntrinsicWidth(),
      drawable.getIntrinsicHeight(),
      drawable.getOpacity() != PixelFormat.OPAQUE ?Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
      Canvas canvas = new Canvas(bitmap);
      //canvas.setBitmap(bitmap);
      drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
      drawable.draw(canvas);
      return bitmap;
      }

    五、Bitmap Canvas关系理解:

    • Bitmap 可以理解为存的像素,Canvas为画布,使用paint和Canvas画的对象都讲转化为像素保存在Bitmap中,也就是Canvas画布展示的都是Bitmap像素的。所以,创建Canvas时的参数需要一个bitmap像素对象。

    • Drawable 就是能够被画带画布上的对象,Bitmap是一种Drawable,于是有了BitmapDrawable,颜色是一种Drawable,所以有了ColorDrawable. 形状是一种Drawable,所以有了ShapeDrawable。

    相关文章

      网友评论

          本文标题:ddu-Drawable

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