Android自定义控件——01绘图基础

本文详细介绍了Android自定义控件中的绘图基础,包括Paint和Canvas的使用,颜色设置,路径绘制,Region操作以及文字绘制。讲解了如何设置画笔风格、画布变换,以及动态添加控件和调整LayoutParams。
摘要由CSDN通过智能技术生成

1.绘图基础

1.1 基本图形绘制

1.1.1 概述

  • Paint类是画笔,Canvas类是画布。
  • Paint类里设置:画笔大小、粗细、画笔颜色、透明度、字体的样式等。
  • Canvas类里设置:如圆形、矩形、文字等。

1.1.2 Paint使用基础

  • setStyle() :设置填充样式

    • Paint.Style.FILL : 仅填充内部。
    • Paint.Style.FILL_ AND_ STROKE :填充内部和描边。
    • Paint.Style.STROKE : 仅描边。
  • setStrokeWidth():设置描边宽度值, 单位是px 。

  • 举例:

    class BaseView : View {
          
        constructor(context: Context) : super(context) {
          }
        constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
          }
        constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
          }
    
        override fun onDraw(canvas: Canvas) {
          
            super.onDraw(canvas)
            //设置画笔的基本属性
            /**
             * 实际上:不允许在onDraw()函数中创建Paint对象,onDraw()函数会被多次调用,会引起GC。
             * 一般在自定义控件的构造函数中创建变量。
             */
            val paint = Paint()
            paint.color = Color.RED//颜色
            paint.style = Paint.Style.STROKE//填充样式
            paint.strokeMiter = 50f//描边宽度 单位px
            canvas.drawCircle(190f, 200f, 150f, paint)
        }
    }
    

1.1.3 Canvas使用基础

  • 画布背景设置:

    void drawColor(int color)// 8位的0xAARRGGBB样式颜色值
    void drawARGB(int a,int r,int g,int b)//a指Alpha(透明度)
    void drawRGB(int r,int g,int b)
    
  • 画直线:

    void drawLine(float startX,float startY,float stopX,float stopY,Paint paint)
    
    • startX :起始点X 坐标。
    • startY :起始点Y 坐标。
    • stopX : 终点X 坐标。
    • stopY : 终点Y 坐标。
  • 画点:

    void drawPoint(float x,float y,Paint paint)
    
    • float x : 点的X 坐标。
    • float y : 点的Y 坐标。
  • 矩形工具类RectF 、Rect:

    • RectF 保存float类型数值的矩形结构;Rect保存int类型数值的矩形结构。
    RectF()
    RectF(float left,float top,float right,float bottom)//常用
    RectF(RectF r)
    RectF(Rect r)
        
    Rect()
    Rect(int left,工nt to,int right,int bottom)
    Rect(Rect r)
    
  • 矩形

    void drawRect(float left,float top,float right,float bottom,Paint paint)
    void drawRect(RectF rect,Paint paint)
    void drawRect(Rect r,Paint paint)
    

1.1.4 Color

  • 常量颜色:

    int BLACK
    int BLUE
    int CYAN
    int DKGRAY
    int GRAY
    int GREEN
    int LTGRAY
    int MAGENTA
    int RED
    int TRANSPARENT
    int WHITE
    int YELLOW
    
    • 通过Color.XXX 来直接使用这些颜色。
  • 构造颜色:

    static int argb(int alpha,int red,int green,int blue)//带透明度的颜色
    static int rgb(int red, int green, int blue)//不带透明度的颜色
    
    • 色彩分量的取值范围都是0~ 255 。(十六进制表示更为直观:S0x00~0xFF)
  • 提取颜色分量:

    static int alpha(int color)
    static int red(int color)
    static int green(int color)
    static int blue(int color)
        
    //example 
    int green = Color.green(0xFF000F00);
    

1.1.5 补充

  • **抗锯齿功能:**setAntiAlias()

    void setAntiAlias(boolean aa)
    //example
    paint.setAntiAlias(true)//打开抗锯齿功能
    
  • 多条直线:

    //构造函数1
    void drawLines(float[] pts, Paint paint)//pts中两两连线
    
    //构造函数2
    void drawLines(float[] pts, int offset, int count, Paint paint)//pts中两两连线
    
    • int offset:集合中跳过的数值个数(指单个数值)。
    • int count:参与绘制的数值个数(指单个数值)。
  • 点:

    void drawPoint(float x, float y, Paint paint)
    
  • 多个点:

    void drawPoints(float[] pts, Paint paint)
    void drawPoints(float[] pts, int offset, int count, Paint paint)
    
  • 圆角矩形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值