自定义控件详解(一):Paint类与Canvas类

前言:  

  自定义控件必需的两个类:Paint与Canvas

  Paint    ---  相当于绘图的"笔"

  Canvas --- 相当于绘图的"纸"

一、Paint  

  绘图笔,即用来设定比如 颜色、线条宽度、线条透明度等熟悉的。

  看一下Paint类所有的setXX() 方法 

   其中常用的:

  • paint.setAntiAlias(true);//抗锯齿功能
  • paint.setColor(Color.RED);  //设置画笔颜色    
  • paint.setStyle(Style.FILL);//设置填充样式
  • paint.setStrokeWidth(10);//设置画笔宽度 ,单位px
  • paint.setShadowLayer(10, 15, 15, Color.GREEN);//设置阴影

  这里简单介绍下 第3个、第5个 方法的属性

  1、paint.setStyle(Style.XXX); //设置填充样式

  Style.FILL ,即 画笔填充 ,比如你要画一个矩形,那么这个矩形内部是填充了的

  Style.STROKE ,即画笔画出的只有边框,

  Style.FILL_AND_STROKE ,即边框线条和内部填充都有

  2、paint.setShadowLayer(10, 15, 15, Color.GREEN);//设置阴影

   (1)、radius(角度),即阴影的倾斜角度,

     (2)、dx ,即阴影x方向偏移量

   (3)、dy ,即阴影y方向偏移量

     (4)、shadowColor ,即阴影的颜色

二、Canvas

  画布、纸。

  Canvas类的主要方法是drawXXX() , 即 画线条,画圆形,画矩形,画文字,画椭圆 等等

三、实践

  我们写几个例子,用Paint控制画笔的线条宽度,颜色等属性

          用Canvas控制画出的形状

  首先自定义一个类继承自 View 类 重写三个构造方法

 重写onDraw()方法,该方法用于绘制自定义控件

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 设置画笔的属性
        paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
        paint.setStrokeWidth(2); //单位px
        paint.setTextSize(30); //设置文本大小

        // 设置画布的属性 ,注意这里onDraw()方法参数有Canvas对象了  不要在 new 一个了
        canvas.drawRGB(255, 255,255);
        canvas.drawLine(200,200,600,200,paint); //画一条从坐标(200,200) 到 坐标(600,200) 颜色为红色的 横向直线
        canvas.drawRect(200,420,600,520,paint); //画一条左上角坐标(200,420) ,宽度400 高度100的 红色实心矩形
        canvas.drawCircle(400,800,100,paint);    //画一条圆心坐标(400,800) 半径100 的红色实心圆形
        canvas.drawText("这是画出来的文本",200,1000,paint); //画一条左侧开始坐标(200,1000)的文本

    }

  在activity中使用

效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

与Ajax同样重要的jQuery(1)

jQuery框架 jQuery 1.4 是企业主流版本,从jQuery1.6 开始引入大量新特性。最新版本 2.1.1,这里讲解以1.8.3为主(新版本主要是浏...

3246
来自专栏闻道于事

JavaScript事件(二)

例题顺序: 1.子菜单下拉 2.图片轮播 3.选项卡效果 4.进度条制作 5.滑动效果 6.滚动固定效果 1.子菜单下拉 1 <!DOCTYPE html...

2666
来自专栏大数据钻研

初探HTML之CSS篇(属性)

前言 I am a slow walker,but I never walk backwards. ---- CSS(层叠样式表) CSS是一种用来表现HTML...

3653
来自专栏九彩拼盘的叨叨叨

Flex布局 写法示例

811
来自专栏进击的君君的前端之路

CSS实现全屏切换效果

3132
来自专栏一“技”之长

Bootstrap响应式前端框架笔记二——排版标签与类

    Bootstrap中对h标签的字体和字号进行了微调,开发者除了可以直接使用这些标签进行标题的修饰外,还可以使用.h1到.h6类来将其他元素的字体进行修饰...

962
来自专栏mukekeheart的iOS之旅

Android layout属性大全

第一类:属性值 true或者 false  android:layout_centerHrizontal 水平居中         android:layo...

2789
来自专栏HTML5学堂

SVG - 基本的SVG属性

SVG - 基本的SVG属性 HTML5学堂:在前一篇文章当中,我们讲解了SVG的基本知识,并且为大家介绍了如何在html文件当中书写SVG代码。今天我们具体讲...

39617
来自专栏vue学习

CSS日常踩坑后的总结(猜测你也会遇到的,持续更新。。。)

可以用left:50%加上margin-left:-(宽度/2),来实现绝对定位的水平居中,这里的宽度指的是设置为绝对定位的元素的宽度

1373
来自专栏河湾欢儿的专栏

表格案例

1322

扫码关注云+社区

领取腾讯云代金券