zoukankan      html  css  js  c++  java
  • 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();对象来绘制图片。

           

  • 相关阅读:
    .dbmdl 文件
    where 命令一个快速定位工具所在的功能
    Window 2008 R2 软件限制策略的默认调整,导致记录事件日志的权限不足
    大家知道什么是 asp.net 呢 ?学习一下
    asp.net membership常见问题总结
    DivCSS布局实例:很实用的图文混排CSS列表
    js 在网页里让文本框只能输入数字的一种方法,外加回车换Tab
    从零开始学DedeCms模板,模板教程,从此模板制作不求人
    .net 数据类型
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3492803.html
Copyright © 2011-2022 走看看