• android自定义View_1——Custom Drawing


    前言:自定义view重要的部分就是view的展示样式,为了实现view的样式可以重写onDraw()方法。

    一:Override onDraw()

        1.当覆盖了onDraw()方法后,需要一个Canvas变量,就是一个画布,他能画直线等各种形状,还能画bitmap等等。

         当使用画布的时候,可以提供一个画笔:Paint。就是设置画出图形的一些特性,如颜色等。

    二:创建图形对象

        1.在android.graphics中提供了两大类:

            1.Canvas:描述画什么。

            2.Paint:怎么画。

        2.比如,你想用Canvas一线,就可以定义一个Paint来设置这条线的颜色等属性,或是用Canvas画一个矩形的时候,

         Paint可以定义一个颜色来填充矩形,或是不填充。

        3.在画图形之前,可以定义多个Paint,并放在一个初始化函数中初始化:

            

        4.在画之前初始化这些画笔是很必要的,因为初始化画笔是个很费资源的过程,如果将初始化过程放在了onDraw中,

         用户界面就会显得有些呆滞,停顿的感觉。

    二:处理layout事件

        1.为了能适当的展示你的控件的大小,往往或通过计算屏幕的大小,密度等属性,来设置控件最终显示的大小。切记

         千万不要自己以为控件就是那么大,要根据实际情况来设置控件的大小,还有为不同的排列方式,提供不同的布局。

        2.view中提供了很多用于测量大小的方法,他们的大多数都不能overridden,如果没有特殊的需要,设置控件的大小

         ,只需要overridden中的onSizeChanged();

        3.onSizeChanged()方法当,第一次给view赋值的时候,或是任何情况view的大小被改变的时候,都会调用此方法。

         计算位置,计算尺寸,都需要在此方法中完成。

        4.当设置view的大小的时候,layout manager会默认包含了view的padding值,所以必须控制padding的值,当给

         view设置大小的时候:

            

        5.如果你想更好的控制控件的大小,需要实现onMeasure方法,这个方法的两个参数表示父控件希望view的显示大小,

         这两个值的大小是硬性标准还是建议值。下面的实例:设置控件的大小以其足够大来容纳内容:

            

          注意:1.设置控件的大小需要考虑padding,正如上文提到过的,这是view的责任。

             2.其中的resolveSizeAndState(int,int)方法用于计算view最终显示的大小高度。

                其中的View.MeasureSpec有三个常量:

                    1.UNSPECIFIED:父控件没有对子view任何限制。

                    2.EXACTLY:父控件给了一个适当的大小给子view,当子view设置大小的时候,收到他的束缚。

                    3.AT_MOST:尽可能的扩展到指定的大小。

             3.这个方法没有返回值,需要在最后强制性的调用setMeasureDimension(w,h)方法,否则在运行时会出现异常。

    三:开始画了

        1.一旦你完成了初始化工作,定义画笔,确定view的大小,你就可以通过实现onDraw()方法来画控件了。虽然每个控件不同,

         但是有一些通用的东西:

           1.画文字:调用 drawText(),通过 setTypeface()设置字体,通过setColor()设置文字的颜色。

           2.绘制基本形状:绘制矩形:drawRect(),绘制椭圆:drawOval(),绘制弧线:drawArc()改变是否填充,是否描边等调用 setStyle()

           3.绘制更复杂的图形就需要使用Path类了,可以将多个线条和多个曲线添加到一个Path对象中,然后使用drawPath(),

            绘制path对象。通过调用setStyle()来设置填充,描边等属性。

           4.通过创建 LinearGradient来创建填充渐变对象,然后通过 setShader()将渐变对象设置到形状上。

           5.用drawBitmap();对象来绘制图片。

           

  • 相关阅读:
    shell脚本根据端口号kill掉进程
    使用netstat -ano 查看机器端口的占用情况(windows环境)
    分享一两个小工具,
    将压缩文件伪装图片格式文件以及将python文件转化为exe文件(测试完,真的有效)
    celery 异步任务 周期任务 定时任务的实现
    wsgi、uwsgi、asgi协议的关系
    centos7忘记密码更改步骤
    工作遇到的坑以及自己的学习悟道之道
    案例小集锦
    asp.net mvc部署
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3492803.html
Copyright © 2020-2023  润新知