自定义控件零基础教学(三)—— Paint基础方法的使用

开篇之言:

        绵绵往里,柔摘梅花泣。云碎梅花无晓意,阑临场空悲喜。

       清苦人生如茶、道道尝尽酥麻。漠然红尘落尽,故应无忆梅花。           —— 吴缘


        上一篇主旨是介绍Paint的所有方法,编程可以说就像打仗,先得知其底线晓之长短,我们才能对其为所欲为,不过贪多嚼不烂,在学基础的同学切不可一头扎了进去,不然是要吃亏的。本篇呢,主要跟大家讲述Paint几个基础方法的用法,已有基础的同学可以跳过此篇。以后文章的风格大体也是这样,先问候相关类的“全家”,再欺负最底层的“家丁”,然后喧宾夺主,嘿嘿嘿。

        

setStyle(Style style)

        上一篇已经讲过这个方法的意义及用法,这里我们就直接贴代码看效果,各位同学再依葫芦画瓢,举一反三去亲手试试,就能掌握这些方法了,这里只说一遍,以下的方法也是如此。

        传递的参数只有三种选择,Paint.Style.FILL,Paint.Style.STROKE,Paint.Style.FILL_AND_STROKE,在上一篇也很详细的讲解了这三个的区别,所以这里只展示前面两个的用法和区别,注意调用方法的位置是在onDraw()方法里,下面的代码也都如此,因此后面我只贴onDraw()方法中的代码。如果不用此方法,画笔默认选择Paint.Style.FILL。


整体代码:

    @Override
    protected void onDraw(Canvas canvas) {//这里的canvas就是画布,也就是我们前面想象里的纸张
        super.onDraw(canvas);
        mPiant.setStyle(Paint.Style.FILL);//使画笔填充绘满
//        mPiant.setStyle(Paint.Style.STROKE);//使画笔描边,绘制线条
        //起点左上角(20,30)   终点右下角(40,50)
        canvas.drawRect(20,30,40,50,mPiant);//draw 绘制  Rect 矩形
        
    }

        这里问题来了,如果将mPaint.setStyle(Paint.Style.STROKE)此行取消注释,并运行代码,呈现出来的效果是上图中的左边呢还是右边?在这里要联想现实生活,难道一只涂料笔只能蘸取一种颜色吗?又或者说,一只笔它只能涂满不能描边吗?答案显然不是,我既可以用红色也可以用黄色,我既可以涂满我也能描边,这完全取决于我想用什么,至于最后的效果是什么,就看我最后选择的是哪种颜色或哪种风格,排在最后的才是绘制出来的。这也就是“覆盖”。

    

setColor(int color)

        画笔默认颜色为黑色。


setAntiAlias()、setDither()

        这两个方法在绘制图片的时候经常用到,在绘制几何图形时无需使用,图形示例在上一篇也有,所以这里不再赘述。


setStrokeWidth(float width)

        大家肯定用过2B铅笔吧,那种笔尖是长方形的,在填写选择题答案时只要一笔划过就可以画满了,极其省事。在这里我将使用此方法,并传入100的值,就相当于将正常2B铅笔的笔尖放大100倍,然后再画一个边长为200的正方形,这里大家可以想象一下画出来的是什么样子。下面贴出代码。

        这里值得注意的是,因为画笔默认是填充画满的,而此方法又体现在笔尖的作用上,也就是描边画线条,所以我们必须在用此方法的同时也要用到setStyle(Paint.Style.STROKE)方法,可以在前也可以在后。

 mPiant.setStyle(Paint.Style.STROKE);
        mPiant.setStrokeWidth(100);
        //起点左上角(20,30)   终点右下角(220,230)
        canvas.drawRect(20,30,220,230,mPiant);//draw 绘制  Rect 矩形


setTextSize(float textSize)

        直接上代码。

@Override
    protected void onDraw(Canvas canvas) {//这里的canvas就是画布,也就是我们前面想象里的纸张
        super.onDraw(canvas);
        mPiant.setTextSize(50);
        canvas.drawText("客舟于此,却不愿随波逐流。",20,20,mPiant);
        //第一个参数是绘制的文本内容   第二个参数是绘制的x点  第三个参数是绘制的y点   第四个参数是画笔
    }

        效果图,是不是很惊奇。


        这里显示出来的字为何有一半似乎卡在上面了?

        问题的原因就出自于安卓的绘制起点,除了绘制文字外,安卓所有的绘制起点都是在左上角的位置,这也就是我为什么在第一篇文章中强调让大家设想左上角为起点,而不是左下角或右上角,先入为主的观念必然要先立起。在这里就可以跟同学们解释了。解释:安卓就是这么规定的!嘿嘿,是不是很强势的解释。

        在绘制文字的规定上,安卓将绘制的起点放在左下角,那么在代码中,我们设置了文字大小为50,而绘制的起点在(20,20),那么势必有30高度的内容就无法正常显示,所以才有我们看到的运行效果。如果想要正常的看到所有内容,只需要将绘制的起点设为(20,50)即可。这里再次强调,是从左下角向右向上绘制,到右上角结束。

        

        这里Paint的几个基础方法已经搞定,下面的文章将会把画布canvas的所有方法贴出。

        最后给学习基础的同学布置一个题目,题目代码在下一章最后给出,先做再看哦。



上一篇:自定义控件零基础教学(二)——绘制的工具类

下一篇:自定义控件零基础教学(四)—— canvas画布的所有方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值