zoukankan      html  css  js  c++  java
  • Android 自定义 View 知识点

    根据 Hencoder 提供的知识点,进行学习和总结。

    三个要点:

    1. 布局
    2. 绘制
    3. 触摸反馈

    绘制

    • 自定义绘制:由自己实现绘制过程
    • 常用绘制方法 onDraw(Canvas canvas)
    • 绘制关键:
      1. canvas: 绘制工具
        • 绘制类方法
          • drawCircle(): 画圆
          • drawRect():画方形
          • drawPath():画路线
          • drawText():画文本
          • drawBitmap():画 bitmap
        • 绘制辅助工具
          • 绘制范围的裁切
          • 绘制内容的几何变换
      2. paint: 本意颜料,Android中指加强颜料,可设置各种风格,比如是空心还是实心或者是粗细等
      3. 绘制顺序:Android 按照顺序绘制的。除了 onDraw() 绘制主体部分,还有绘制前景( Forground)和背景( BackGround)

    示例:

    Paint 常见设置:

    • mPaint.setColor(Color.RED):设置颜色
    • mPaint.setStyle(Style.STROKE):设置绘制模式
    • mPaint.setStrokeWidth(20):设置线条开关
    • mPaint.setAntiAlias(true):设置抗锯齿

    Cancan 绘制类方法

    绘制颜色

    * canvas.drawColor(Color.RED);
    * canvas.drawColor(Color.parseColor("#00ff00"));
    * canvas.drawColor(Color.parseColor("#8800ff00"));
    * canvas.drawRGB(255, 0, 0);
    * canvas.drawARGB(100, 255, 0, 0);
    

    绘制圆

    1. 实心圆: 
    
            mPaint = new Paint();
            canvas.drawCircle(100, 100, 50, mPaint);
    
    2. 空心圆  
    
            mPaint.setStyle(Style.STROKE);
            canvas.drawCircle(200, 200, 50, mPaint);
    
    3. 蓝色实心圆
    
            mPaint.setStyle(Style.FILL);
            mPaint.setColor(Color.BLUE);
            canvas.drawCircle(200, 400, 50, mPaint);
    
    4. 线宽为20的空心圆
    
            mPaint.setStyle(Style.STROKE);
            mPaint.setStrokeWidth(20);
            canvas.drawCircle(400, 200, 50, mPaint);
    

    绘制椭圆

        canvas.drawOval(300, 100, 700, 300, mPaint);
    

    绘制矩形

        canvas.drawRect(250, 500, 700, 800, mPaint);
        //
        Rect tem1 = new Rect(250, 500, 700, 800);
        canvas.drawRect(tem1, mPaint);
        //
        RectF tem2 = new RectF(250, 500, 700, 800);
        canvas.drawRect(tem2, mPaint);
    

    绘制圆角矩形

        RectF t = new RectF(150, 200, 500, 350);
        canvas.drawRoundRect(t, 50, 50, mPaint);
        //
        canvas.drawRoundRect(150, 200, 500, 350, 50, 50, mPaint);
    

    绘制弧形或者扇形

    • drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, Paint paint)
      * left,top,right,bottom:弧形所在的椭圆
      * startAngle:弧形的起始角度(x 轴的正向,即正右的方向,0度的位置。顺时针为正角度,逆时针为负角度)
      * sweepAngle:弧形划过的角度
      * useCenter:表示十分连接圆心,连接圆心是扇形不连接圆心是弧形

    • 绘制弧形

        canvas.drawArc(200, 600, 800, 1000, 0, 47, false, mPaint);
      
    • 绘制扇形

        canvas.drawArc(200, 600, 800, 1000, 0, 135, true, mPaint);
      
    • 示例:

        mPaint.setAntiAlias(true);
        mPaint.setStyle(Style.FILL);
        canvas.drawArc(200, 100, 800, 500, -110, 100, true, mPaint); // 绘制扇形
        canvas.drawArc(200, 100, 800, 500, 20, 140, false, mPaint); // 绘制弧形
        mPaint.setStyle(Paint.Style.STROKE); // 画线模式
        canvas.drawArc(200, 100, 800, 500, 180, 60, false, mPaint); // 绘制不封口的弧形
      

    画自定义图形

    • drawPath(Path path, Paint paint): 通过描述路径的方式来绘制图形

      • path: 描述路径的对象
      • paint:
    • Path

      • 直接描述路径
        1. addXxx() -- 添加子图形
        • addCircle(float x, float y, float radius, Direction dir),该方法与 Canvas 的 drawCircle() 一样的,绘制圆形
          • 描述:添加圆
          • 参数 x 和参数 y :确定圆心
          • 参数 radius: 确定圆的半径
          • dir: 画圆路径的方向,枚举类型,CW(clockwise)顺时针/CCW(counter-clockwise)逆时针
        • addArc():与 Canvas 的 drawArc() 一样,绘制弧形或者扇形
        • addOval():与 Canvas 的 drawOval() 一样,绘制椭圆
        • addRect():与 Canvas 的 drawRect() 一样,绘制矩形
        • addRoundRect():与 Canvas 的 drawRoundRect() 一样的,绘制圆角矩形
        1. xxxTo()--画线(直线或者曲线)
        • lineTo():画直线,从当前位置向目标位置画一条直线,参数为目标位置 x,y
        • rLineTo(): 与 lineTo() 方法一样,参数是相对当前位置的相对坐标
        • moveTo():移动到目标位置
        • rMoveTo()
        • cubicTo():画三次贝塞尔曲线
        • rCubicTo()
        • quadTo():画二次贝塞尔曲线
        • rQuadTo()
        • arcTo: 画弧形
        1. close():封闭当前子图形,与 lineTo(起始坐标)一样
      • 辅助的设置或计算
        • setFillType():设置填充方式
          • EVEN_ODD:奇偶原则,交叉填充模式,对于平面的任意一点,向任意方向射出一条射线,这条射线和图形相交的次数(相交才算,相切不算)如果是奇数,则这个点被认为在图形内部,是要被涂色的区域;如果是偶数,则这个点被认为在图形外部,是不被涂色的区域。
          • WINDING (默认值):非零环绕数原则,全填充模式
          • INVERSE_EVEN_ODD
          • INVERSE_WINDING

    绘制 Bitmap

    • drawBitmap()

    绘制文字

    • drawText()
  • 相关阅读:
    模糊查询三种解决方式
    trim标签&&MyBatis内置参数
    ResultMap&&鉴别器&&别名
    增加null&&使用HashMap存储查询结果集
    MyBatis处理多个参数问题
    SpringCloud中使用Zuul实现路由网关
    SpringCloud分布式config配置中心
    FeignClient的参数传递给服务提供方的方式(简单数据类型、对象)
    Hystrix的使用实例***
    什么是缓存穿透、缓存击穿
  • 原文地址:https://www.cnblogs.com/liyiran/p/8783150.html
Copyright © 2011-2022 走看看