Android自定义View相关Api

自定义View

对自定义View一直很模糊,刚好最近不太忙,系统性的总结一下。自定义View主要有以下几个知识点:

  • Canvas:可以它为一个画布,用于承载View中的所有元素(基础)
  • Paint:作为画笔的存在,用来加特效的(基础)
  • 裁切和几何变换:通过限定在某些区域绘制以及对view进行变换达到指定效果(进阶)

Canvas

  • 可以通过drawXxx()方法画出下列简单图形:

    • drawCircle():圆
    • drawPoint():点
    • drawLine():线
    • drawLines():多条线
    • drawRect():长方形
    • drawArc():弧
    • drawOwal():椭圆
    • drawRoundRect():圆角矩形
  • 通过drawPath()画出复杂的图形

  • 通过drawBitmap()画图片

  • 通过drawText()画图片

Paint

  • setColor():设置颜色

  • setShader(Shader shader):设置着色器,Shader有以下几种子类:

    • LinearGradient 线性渐变,两个点之间的颜色线性渐变

      Shader.TileMode,着色规则有三种,CLAMP、MIRROR、REPEAT,以下同。
      
    • RadialGradient 辐射渐变,从圆心向四周进行辐射渐变

    • SweepGradient 扫描渐变,从圆的0角度,旋转进行扫描渐变

    • BitmapShader 图片着色器,将图片作为着色器,比如可以用来做圆型头像的裁剪

    • ComposeShader 混合着色器,一个Paint中使用两个着色器,混合用

      PorterDuff.Mode,是用来指定两个着色器公共绘制时的颜色策略,是一个enum,共17个。
      大体分为两类,Alpha 合成 (Alpha Compositing)、混合 (Blending)

  • setColorFilter(ColorFilter colorFilter):为绘制设置颜色的过滤。可用于制作滤镜效果。ColorFilter有三个子类:

    • LightingColorFilter,用来模拟简单的光照效果。
    • PorterDuffColorFilter,使用一个指定的颜色和一种指定的 PorterDuff.Mode 来与绘制对象进行合成。
    • ColorMatrixColorFilter,使用一个 ColorMatrix 来对颜色进行处理,是一个4*5的矩阵(有点厉害,不知道怎么用),StyleImageView
  • setXfermode(Xfermode xfermode),只有一个子类PorterDuffXfermode

  • setAntiAlias (boolean aa) 设置抗锯齿

  • setStyle(Paint.Style style)

  • setStrokeWidth(float width)

  • setStrokeCap(Paint.Cap cap)

  • setStrokeJoin(Paint.Join join)

  • setStrokeMiter(float miter)

  • setDither(boolean dither)

  • setFilterBitmap(boolean filter)设置是否使用双线性过滤来绘制 Bitmap 。

  • setPathEffect(PathEffect effect):PathEffect 分为两类,单一效果的 CornerPathEffect DiscretePathEffect DashPathEffect PathDashPathEffect ,和组合效果的 SumPathEffect ComposePathEffect。

  • setShadowLayer(float radius, float dx, float dy, int shadowColor)

  • setMaskFilter(MaskFilter maskfilter)

  • setTextSize()等

范围裁切和自由变换

  • 范围裁切

    使用canvas的clipRect()和clipPath(),这两个方法进行裁切,注意使用Canvas.save()和Canvas.restore()保存和恢复Canvas的状态

  • 自由变换

    • 使用 Canvas 来做常见的二维变换;

      Canvas.translate(float dx, float dy) 平移
      Canvas.rotate(float degrees, float px, float py) 旋转
      Canvas.scale(float sx, float sy, float px, float py) 放缩
      Canvas.skew(float sx, float sy) 错切

    • 使用 Matrix 来做常见和不常见的二维变换;

      1.创建 Matrix 对象;
      2.调用 Matrix 的 pre/postTranslate/Rotate/Scale/Skew() 方法来设置几何变换;
      3.使用 Canvas.setMatrix(matrix) 或 Canvas.concat(matrix) 来把几何变换应用到 Canvas。
      4.Matrix.setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount) 用点对点映射的方式设置变换

    • 使用 Camera 来做三维变换。 Camera 的三维变换有三类:旋转、平移、移动相机。注意使用Camera的sava()、restore()、reset()等方法,大致与Canvas的类似

      1.旋转:Camera.rotateX(),Camera.rotateY(),Camera.rotateZ(),Camera.rotate() 三维旋转;注意Camera的旋转中心,一般的需要配合Canvas的translate(),将旋转中心切换为远点进行旋转;然后用camera.applyToCanvas(canvas); // 把旋转投影到 Canvas
      2.平移:Camera.translate(float x, float y, float z)
      3.移动相机:Camera.setLocation(x, y, z) 设置虚拟相机的位置,注意这个方法它的参数的单位不是像素,而是 inch,英寸

你可能感兴趣的:(Android自定义View相关Api)