自定义View-绘制基础

前言

在Android中很重要的就是UI,我们来简单总结一下自定义View中的绘制问题

  • 重写绘制方法:最常用的就是onDraw()

  • 绘制的关键是Canvas(画布)

  • 可以使用不同绘制方法来控制遮盖关系

// 先上一段简单的代码: 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 存在各种drawXXX()方法,来满足绘制需求
        canvas.drawCircle(50,50, 20,mPaint);
        // 存在各种范围裁切方法,clipXXX()来裁切
        canvas.clipOutRect(0,0,20,20);
        // 几何变换,matrix可以作为一个参数传入drawXXX()方法当中
        canvas.drawBitmap(mBitmap, mMatrix, mPaint);
    }

Paint

常用方法

// 绘制模式,实心、空心等
paint.setStyle(Style style);

// 颜色
paint.setColor(int color);

// 线条宽度
paint.setStrokeWidth(float width);

// 文字大小
paint.setTextSize(float textSize);

// 抗锯齿开关
paint.setAntiAlias(boolean enable);

Canvas

常用方法

// 将整个区域染色,覆盖原有内容
canvas.drawColor(color);

// 画圆
canvas.drawCircle(x, y, radius, paint);

// 画矩形
canvas.drawRect(left, top, right, bottom, paint);
canvas.drawRect(rect, paint);

// 画点
canvas.drawPoint(x, y, paint);
canvas.drawPoints(pts, offset, count, paint);
canvas.drawPoints(pts, paint);

// 画椭圆
canvas.drawOval(left, top, right, bottom, paint);

// 画线
canvas.drawLine(startX, startY, stopX, stopY, paint);
canvas.drawLines(pts, offset, count, paint);
canvas.drawLines(pts, paint);

// 画圆角矩形
canvas.drawRoundRect(left, top, right, bottom, rx, ry, paint);

// 画弧形或扇形
canvas.drawArc(left, top, right, bottom, startAngle, sweepAngle, userCenter, paint); 

// 画自定义图形
canvas.drawPath(path, paint);

// 画bitmap
canvas.drawBitmap(bitmap, left, top, paint);

// 画文字
canvas.drawText(text, x, y. paint);

Path方法

// 直接描述路径

1、addXxx() ---添加子图形,如圆、椭圆、矩形

2、xxxTo() ---画线
    lintTo:绝对坐标
    rlineTo:相对坐标,从当前位置开始:即最后一次调用画Path方法的终点位置

    moveTo()是个很重要的方法,可以移动最后一次调用画Path方法的坐标
    close() 封闭当前子图形,由当前位置向起点绘制一条直线
    
3、当使用addXxx()时,每一个方法的调用都是新增了一个独立的子图形
    使用xxxTo等方法时,每一次断线标志着一个子图形的结束



// 辅助的设置和计算

setFillType(FillType fillType)   四个FillType

EVEN_ODD
WINDING(默认值)
INVERSE_EVEN_ODD
INVERSE_WINDING

在使用path时有一个dir参数,是路径的方向
这几个FillType的原理挺复杂,涉及到了射线的方向
大体意思就是一个是全填充,一个是交叉填充,具体的就不多说了,大家可以查有关的资料

总结

1、paint的style,画线还是填充,画线可以设置宽度

2、各种画图形的方法,传入的参数,一般顺序都是:左上右下,一些属性或者操作,最后来一支paint

3、注意画弧度和扇形的方法的参数,挺多个,弧度和扇形的角度:x正方向是0度,顺时针是正角度

4、path的使用,也就是画路径,有按当前位置画的,也有按绝对的坐标来画的,还有“抬起画笔这么一说”

5、path还可以设置各种填充效果,规则跟射线方向和奇偶交点数有关

6、贝塞尔曲线很美,灵活应用需要花时间,以后用到了再慢慢掌握

说白了绘制就是Canvas和Paint,一块高科技的智能画布,一支高科技的智能笔,想要什么效果基本都有,可以精确的画出大部分你想要的图形,说明书已经摆在那了,就看你对他们理解的深刻不深刻了。其实这些东西不用死记硬背,常用的可能会有记忆,不常用的文档笔记拿出来看一下就好了

贴个HenCoder的链接:自定义View-绘制基础

分割线----------------------------------------------

实践

// 不准备写什么了,都比较的简单,基本都是一句话

// 这里要掌握的就是画图时对坐标点的熟悉

// 还有扇形, 圆弧, Path的使用以及那些画图的方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值