前言:自定义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();对象来绘制图片。

       

android自定义View_1——Custom Drawing的更多相关文章

  1. Android 自定义View及其在布局文件中的使用示例(二)

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ...

  2. Android自定义视图教程

    Android自定义视图教程 Android的UI元素都是基于View(屏幕中单个元素)和ViewGroup(元素的集合),Android有许多自带的组件和布局,比如Button.TextView.R ...

  3. Android 自定义view(二) —— attr 使用

    前言: attr 在前一篇文章<Android 自定义view -- attr理解>已经简单的进行了介绍和创建,那么这篇文章就来一步步说说attr的简单使用吧 自定义view简单实现步骤 ...

  4. Android 自定义View 三板斧之二——组合现有控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现 ...

  5. Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...

  6. [原] Android 自定义View步骤

    例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...

  7. Android 自定义title 之Action Bar

    Android 自定义title 之Action Bar 2014-06-29  飞鹰飞龙...  摘自 博客园  阅 10519  转 25 转藏到我的图书馆   微信分享:   Action Ba ...

  8. Android -- 自定义View小Demo,绘制四位数随机码(一)

    1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...

  9. Android自定义View

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 很多的Android入门程序猿来说对于Android自定义View ...

随机推荐

  1. gulp的入门浅析

    阅读目录 介绍gulp 安装gulp gulpfile.js 运行gulp 介绍gulp的api 介绍gulp gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/c ...

  2. iOS:iOS为什么要用-all_load、-ObjC、-force_load

    为了减少工作量复用部分代码,于是乎我们开始选择重构整个项目,把可以公用的代码放在一起打包成一个静态库导入到其他的项目中使用. 介绍这部分内容的文章在网上很多,各位可以Baidu一下细看. 但是每次在加 ...

  3. OS中处理机调度模型和调度算法

    OS中处理机调度模型和调度算法 调度层次 1.1. 高级调度(长程调度,作业调度) 功能:依据某种算法.把在外存队列上处于后备队列的那些作业调入内存.以作业为操做对象. 作业:比程序更为广泛的概念,不 ...

  4. 【Qt编程】基于Qt的词典开发系列&lt;八&gt;--用户登录及API调用的实现

    在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...

  5. php 基础入门篇之前言

    本人文笔不好,言辞简陋.没有华丽的语句,也没有精致的词语.仅仅是想给大家说一下,和大家一块学习,共同进步.学一点技术,找个吃饭的手段!接下来我会梳理一下知识,算是温故知新,同一时候也算是和大家一起在学 ...

  6. 【Java】Java_09 类型转换

    1.自动类型转换 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型.在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失. 特例: 可以将整型常量直接赋 ...

  7. pat(B) 1037. 在霍格沃茨找零钱(水题)

    代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> ...

  8. zabbix监控redis的key值

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对red ...

  9. velcoity使用说明:foreach指令

    http://blog.csdn.net/madding/article/details/6641020当在velocity中需要显示一个列表信息,我们会用foreach循环输出, 要求: 假如现在需 ...

  10. usb转串口模块下载时遇到的问题

    ch340g usb转TTL模块,烧写wifi模块ESP8266固件时,为图省事,我直接用的该模块的3.3v电为wifi模块供的电,结果刚一上电就出现串口模块消失(听到噔的一声),电脑设备管理器里就看 ...