android paint类函数讲解(一)

本文深入探讨了Android中的Paint类,包括setStyle()、setShadowLayer()、setTextAlign()等重要函数的使用。通过实例展示了如何设置填充样式、添加阴影、调整文字对齐方式,并详细解析了各参数的意义。此外,还讲解了如何设置文字透明度、拉伸、粗体、删除线、下划线等效果,以及PathEffect的子类应用,如CornerPathEffect、DashPathEffect、DiscretePathEffect和PathDashPathEffect,帮助读者掌握自定义控件效果的关键技巧。
摘要由CSDN通过智能技术生成

想玩好一些自定义控件效果,什么动画,Paint,Canvas这三方面必须要学好,Paint里面的函数会分几篇博客讲解,也许讲的不太好或者有不对的地方,希望能指出来,一起学习,一起提供!

首先看下系统给Paint类都有那么函数:



先把最简单的使用函数说下:

mPaint.setColor(Color.RED);//设置画笔的颜色
mPaint.setTextSize(60);//设置文字大小
mPaint.setStrokeWidth(5);//设置画笔的宽度
mPaint.setAntiAlias(true);//设置抗锯齿功能 true表示抗锯齿 false则表示不需要这功能

上面都是很容易理解的方法,现在讲下其他重要的函数

1:paint.setStyle()设置填充样式的,它接受的形参是Style,是Paint类中的一个枚举,源码:


从图中可以看出它有三个值可以选择,写个例子直观点:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mPaint.setColor(Color.RED);//设置画笔的颜色
    mPaint.setTextSize(60);//设置文字大小
    mPaint.setStrokeWidth(5);//设置画笔的宽度
    mPaint.setAntiAlias(true);//设置抗锯齿功能 true表示抗锯齿 false则表示不需要这功能
    mPaint.setStyle(Paint.Style.FILL);

    canvas.drawCircle(200,200,160,mPaint);
    mPaint.setStyle(Paint.Style.STROKE);
    canvas.drawCircle(600,200,160,mPaint);
}
我画了2个圆,只是设置了style不一样而已,效果如下:


刚说了Style枚举定义了三个值还有一个Fill_AND_STROKE我做实验发现其效果和FILL一样,具体有啥不同,不太清楚,

2:public void setShadowLayer(float radius, float dx, float dy, int shadowColor) 设置添加阴影

参数说明:

radius 表示阴影的倾斜度

dx:水平方向位移的像素

dy:垂直方向位移的像素

shadowColor:设置阴影的颜色

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mPaint.setTextSize(60);//设置文字大小
    mPaint.setStrokeWidth(5);//设置画笔的宽度
    mPaint.setAntiAlias(true);//设置抗锯齿功能 true表示抗锯齿 false则表示不需要这功能

    mPaint.setShadowLayer(10,10,10,Color.RED);
    canvas.drawText("杭州西湖风景真好",200,200,mPaint);
}
效果:


3:public void setTextAlign(Align align)//设置文字对齐方式

Align也是Paint类中定义的枚举,源码如下:

public enum Align {
    /**
     * The text is drawn to the right of the x,y origin
     */
    LEFT    (0),
    /**
     * The text is drawn centered horizontally on the x,y origin
     */
    CENTER  (1),
    /**
     * The text is drawn to the left of the x,y origin
     */
    RIGHT   (2);

    private Align(int nativeInt) {
        this.nativeInt = nativeInt;
    }
    final int nativeInt;
}
取值为left,right,center,刚开始以为很简单,后来写demo发现不对,经过搜索发现canvas.drawText()调用这函数没我们从字面上理解的那么简单,这会涉及到一个基线问题,记得苦逼的小时候老师叫我们写26个字母,关键是还要抄10篇,哪时候本子是四格的,要求字母不能超过这个范围否则叫我们重写,多么失败的中国教育,如图:


如果要写字母的是这样的,


其中第三个横线为基线,如图:


我们看下canvast的drawText(String text, float x, float y, Paint paint)方法四个参数代表什么意思,以前一直以为x和y是表示view所在矩形的左上角左标为原点,如图:


其实真正的原点是这个,


上面的杭 子下面做下角为原点,红色的线为基线,从图可以看出y所代表的是基线的位置,这个我们可以写个例子验证下是否正确,如果你画一条线,我们知道画一条线,需要知道二个点的坐标,然后连接起来,然后绘制一段文字,这文字的原点以所画的起点为原点,效果:


drawText出来的文字文字位置和它的绘制时设置文字的大小有关,设置的坐标以及基线有关,而基线又是和y轴坐标有关,

接着讲public void setTextAlign(Align align)这个方法我现在分别给Align的值为LEFT,CENTER,RIGHT效果分别是:

Left:


center:


right:


发现当设置center和right和我们想象的效果根本不是一回事,这到底是什么原因呢?之前一直以为绘制文字是从x轴坐标点向右开始绘制文字,通常都是这种思维,这就是drawText()方法中x坐标有关,x代表所要绘制文字所在矩形的相对位置。相对位置就是指指定点(x,y)在在所要绘制矩形的位置,这才是x坐标正确的理解其意义,可以理解x是以它所在矩形为参考物


<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值