android 进阶自定义view (第一天)

       自定义控件是Android系统中一个非常重要的特性,通过自定义控件可以使生硬的界面变得生动活泼。每个应用或多或少都会有几个乃至几十个自定义控件。小编也是深受其害,遇到简单的需求,通过网上找找相关代码,修修改改还能满足,遇到苛刻的老板,完全没有办法,经历过两次的毒打,小编狠下心来,坚持学习,为了以后不再为了自定义而感到怀疑人生。今天是小编学习的第一天,以后会努力坚持一天发布一篇,从0到1。加油!

         基本图形的绘制

                我们平时画图的时候需要的两个工具,是纸和笔。那么,在Android中,Paint类就是画笔,Canvas类就是纸,在这里叫  做画布。所以,凡是跟画笔设置相关的,比如画笔大小、粗细、画笔颜色、透明度、字体的样式等,都在Paint类里设置:同样,凡是画出成品的东西,比如图形、矩形、文字等,都要调用Canvas类里的函数生成。

              下面通过一个自定义控件的例子来学习一下,以及了解PaintCanvas类的用法。

               一般自定义View有一个构造方法:

          重写onDraw(Canvas canvas)。可以看到,在该函数中,入参是一个Canvas对象,也就是当前控件的画布,所以只要调用Canvas的绘图函数,效果就可以直接显示在控件上

 完整的代码如下:

 运行效果:

         从这里看到,只需要先创建一个派生自View的类,再重新在onDraw()函数中设置Paint并调用Canvas的一些绘图函数,就可以画出我们想要的图形。由此看来,自定义控件并不复杂。下面来看下如何设置画笔。

        画笔的基本设置

             1.setColor

void setColor(int color)

           一种颜色是由红、绿、蓝三种颜色合成出来的,所以color只能取8位的0xAARRGGBB样式的颜色。

          其中:

  •     代表透明度(Alpha),取值范围是0~255(对应十六进制数0x00~0xFF),取值越小,透明度越高,图像也就越透明。当取     0时,图像完全不可见。

  •    R  代表红色值(Red),取值范围是0~255(对应十六进制数0x00~0xFF),取值越小,红色越少。当取0时,表示红色完全不       可见;当取255时,红色完全显示。

  •    G  代表绿色值(Green),取值范围是0~255(对应十六进制数0x00~0xFF),取值越小,绿色越少。当取0时,表示绿色完         全不可见;当取255时,绿色完全显示。

  •    B  代表蓝色值(Blue),取值范围是0~255(对应十六进制数0x00~0xFF),取值越小,蓝色越少。当取0时,表示蓝色完全不     可见;当取255时,蓝色完全显示。

      比如0xFFFF0000就表示大红色。因为透明度是255,表示完全不透明,红色取全量值255,其他色值全取0,表示颜色中只有红色;当然,如果我们不需要那么红,则可以适当减少红色值,比如0xFFFFFF00就会显示弱红色。

其实,出手动组合颜色的方法以外,系统还提供了一个专门用来解析颜色的类--Color(有关Color类的使用,后期再进行学习)

下面绘制一大一小两个圆,并将这两个圆叠加起来,上方的圆半透明,代码如下:

Paint paint = new Paint();
paint.setColor(0xFFFF0000);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(50);
canvas.drawCircle(190,200,150,paint);

paint.setColor(0x7EFFFF00);
canvas.drawCircle(190,200,100,paint);

这里绘制了两个圆,第一个圆的颜色值是0xFFFF0000,即不透明的红色,半径取150px;第二个圆的颜色值是0xEFFFF00,即半透明的黄色,半径取100px。效果如下图所示。

2.setStyle

void setStyle(Style style)

该函数用于设置填充样式,对于文字和几何图形都有效。style的取值如下:

  • Paint.Style.FILL:仅填充内部。
  • Paint.Style.FILL_AND_STROKE:填充内部和描边。
  • Paint.Style.STROKE:仅描边。

设置填充内部及描边的样式代码如下:

Paint paint = new Paint();
paint.setColor(0xFFFF0000);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(50);
canvas.drawCircle(190,200,150,paint);

Paint paint = new Paint();
paint.setColor(0xFFFF0000);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(50);
canvas.drawCircle(190,200,150,paint);

Paint paint = new Paint();
paint.setColor(0xFFFF0000);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(50);
canvas.drawCircle(190,200,150,paint);

各自效果图如下:

    

明显可见,FILL_AND_STROKEFILLSTROKE叠加在一起显示的结果,FILL_AND_STROKEFILL多了一个描边的宽度。

3. setCrokeWide()

void setStrokeWidth(float width)

用于设置描边宽度 值,单位是px。当画笔的Style样式是STROKE、FILL_AND_STROKE时有效。

 

今天小编就学习到这了,一边学习,一边写文章,还是有点效果,希望每天都能坚持下来。坚持一天一篇。

android 进阶自定义view (第二天)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值