`
qq986945193
  • 浏览: 93915 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

android开发之自定义View 详解 资料整理 小冰原创整理,原创作品。

 
阅读更多
/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

前言
  • 课程介绍
    • 自定义控件在android相当重要。要求:大家熟悉自定义控件的原理,熟悉自定义控件的使用步骤。
      • 按类型划分,自定义View的实现方式可分为三种:自绘控件组合控件、以及继承控件
      • 如何让自定义的View在界面上显示出来? 只需要像使用普通的控件一样来使用自定义View就可以了。
    • 1,回顾系统的一些控件,Viewpager广告条的展示
    • 2,介绍View的绘制过程
    • 3,自定义View:开关Button
    • 4,自定义属性
    • 5,组合控件:标题栏
    • 6,继承系统控件:ListView刷新加载的原理等
  • 系统控件
    • 心中要有一个View树

一,自定义View:
  • 概念:自绘控件的意思就是,这个View上所展现的内容全部都是自己绘制出来的。
  • 自绘控件的步骤:
    • 实现构造方法
    • onMeasure(int ,int)中调用onMeasureDimention() 进行测量
    • onDraw(Canvas)方法进行绘制View
    • 实现onTouchEvent(MotionEvent ev)方法,对touch事件进行解析
  • 一些API:
    • 绘制View主要是onDraw()方法中完成。通过参数Canvas来处理,相关的绘制主要有drawRect、drawLine、drawPath等等。
    • Canvas绘制的常用方法:
      1. drawColor() 填充颜色
      2. drawLine() 绘制线
      3. drawLines() 绘制线条
      4. drawOval() 绘制椭圆
      5. drawPaint() 画笔绘制
      6. drawPath() 绘制路径
      7. drawPicture() 绘制图片
      8. drawPoint() 绘制点
      9. drawPoints() 绘制点
      10. drawRGB() 填充颜色
      11. drawRect() 绘制矩形
      12. drawText() 绘制文本
      13. drawTextOnPath() 在路径上绘制文本
  • 2、刷新View:(刷新view的方法这里主要有:)
    • invalidate(int l,int t,int r,int b)
      • 刷新局部,四个参数分别为左、上、右、下
    • invalidate()
      • 整个view刷新。执行invalidate类的方法将会设置view为无效,最终重新调用onDraw()方法。
      • invalidate()是用来刷新View的,必须是在UI线程中进行工作。在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。
    • invalidate(Rect dirty)
      • 刷新一个矩形区域

二,组合控件
  • 概念:组合控件的意思就是,不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。
  • 例如:标题栏就是个很常见的组合控件,很多界面的头部都会放置一个标题栏,标题栏上会有个返回按钮和标题,点击按钮后就可以返回到上一个界面。那么下面我们就来尝试去实现这样一个标题栏控件。

三,继承控件:
  • 概念:继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 就是一个典型的继承控件。

  • 例如:对ListView进行扩展,加入在ListView上滑动就可以显示出一个删除按钮,点击按钮就会删除相应数据的功能。或者刷新加载的ListView

一些重要的补充:
1,通用的布局,再抽出来一个布局,命名规则:layout开头。栗子:layout_title.xml ; 如何引用 : <include layout="@layout/layout_tilte" />


------------------------------------------------------华丽丽的分割线 - 咯咯咯--------------------------------------------------
功能案例

系统重要控件的展示:Viewpager
  • 步骤:
1,ViewPager的图片的展示
2,描述的联动
3,点的联动
4,无限循环的实现
5,自动播放,动画效果的实现


自定义开关按钮:
  • 步骤:
    • 1,自定义类继承自View
    • 2,重写onMeasure方法,设置View的大小
    • 3,重写onDraw方法,绘制View的内容
    • 4,重写onTouchEvent事件,对touch事件进行解析

自定义属性:
1.在attrs.xml文件中声明属性,
如:<declare-styleablename="MyToggleBtn"> //声名属性集的名称,即这些属性是属于哪个控件的。
<attrname="current_state"format="boolean"/> //声名属性current_state 格式为boolean类型
<attrname="slide_button"format="reference"/> //声名属性slide_button 格式为reference类型
</declare-styleable> 所有的format类型,详见注1:

2, 在布局文件中使用:在使用之前必须声名命名空间,
xmlns:zhaokeming="http://schemas.android.com/apk/res/com.zhaokeming.mytogglebtn"
说明:① xmlns是XMLnamespace的缩写; ② zhaokeming 可为任意写符 ③ http://schemas.android.com/apk/res/此为 android固定格式; ④com.zhaokeming.mytogglebtn此应用的包名,如manifest配置文件中一致。 布局文件:
<com.zhaokeming.mytogglebtn.MyToggleButton xmlns:heima="http://schemas.android.com/apk/res/com.zhaokeming.mytogglebtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
heima:slide_button="@drawable/slide_button"/>

3 ,在代码中对属性进行解析,主要代码:
TypedArrayta=context.obtainStyledAttributes(attrs,R.styleable.MyToggleBtn); //由attrs获得TypeArray
可以查看,View 自己定义的属性 怎么初始化的。。。

注1: format常用类型: reference 引用 color 颜色 boolean 布尔值 dimension 尺寸值 float 浮点值 integer 整型值 string 字符串 enum 枚举


组合控件-标题栏:
  • 重要的知识点:
    • 1,去掉标题: requestWindowFeature(Window.FEATURE_NO_TITLE); 必须在setContentView()方法执行前
    • 2,相同的布局,可以抽出来一个layout_xxx.xml 。 引用 <include layout="@layout/layout_xxx">
    • 3 ,定义相同控件的功能时,就可以抽出来一个 自定义组合控件
  • 步骤:
    • 1,继承一个layout_xxx.xml布局的最外面的 布局,比如 LinearLayout,RelativeLayout等等
    • 2, // inflate:把xml布局文件,转换成 View对象 ;把xml文件转换成的View对象,然后赋值给当前的类。 ;当前的类,就相当于View对象 ;通过调用这个View.inflate(mContext, R.layout.layout_xxx, this);
    • 3,把控件初始化,添加相应的功能

自定义ListView的刷新:
  • 步骤:
    • 1,
  • 注意事项
    • 1,
      • addHeaderView(View v) : 在ListView的头部,添加一个View ; 这个方法必须在 setAdapter()之前调用;
      • addFooterView(v): 在ListView的底部添加view
    • 2,
      • getHeight(): 在执行完onLayout()方法后,才会执行
      • getMeasuredHeight(); 在onMeasure()方法后,就执行;
        • 实现步骤:
        • mViewHeader.measure(0, 0);// 通知系统,执行测量工作
        • mHeaderHeight = mViewHeader.getMeasuredHeight(); // 获得测量的高度


/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

分享到:
评论

相关推荐

    自定义吐司以及Toast的各种用法,详解。教你学会使用各种各样的Toast

    在Android开发中,`Toast`是一种非常常用的轻量级通知机制,它能在短时间内显示简短的信息,然后自动消失。在本教程中,我们将深入探讨如何使用`Toast`,包括其基本用法、自定义`Toast`以及一些实用技巧。本文将主要...

    安卓手机查看java源码-DavidAndroidProjectTools:Android开发常用功能大集合。以及知识点的详解代码

    小功能,肯定少不了各种工具类与自定义View等等,我会和做项目一样,分包,并且要求和我自己做项目差不多 不过,每个人的习惯都不相同,具体分包不要纠结。希望大家能和我一样能看懂代码,学会理解,一起提高自我技能...

    Qt 采用http通信json解析读取天气

    Qt 采用http通信json解析读取天气

    岗位晋升360度调查表.doc

    岗位晋升360度调查表.doc

    合法辞退员工的N种方式.pptx

    合法辞退员工的N种方式.pptx

    大模型、Agent、具身智能及人形机器人学习全路径规划.pdf

    大模型、Agent、具身智能及人形机器人学习全路径规划.pdf

    华润万家员工手册.doc

    华润万家员工手册.doc

    招聘需求分析.xls

    招聘需求分析.xls

    光伏+蓄电池系统中双有源桥DC-DC变换器的Matlab仿真与MPPT及闭环控制实现

    内容概要:本文详细介绍了基于‘光伏(PV)+蓄电池+负载’架构的双有源桥DC-DC变换器仿真方法及其在Matlab 2021b中的具体实现。首先解析了光伏系统的MPPT控制,通过扰动观察法使光伏板始终处于最大功率点。接着讨论了蓄电池的恒流充放电控制,利用PI控制器确保电池的安全和高效运作。然后阐述了双有源桥DC-DC变换器的闭环控制机制,借助PID控制器维持系统输出电压的稳定性。最后,文章展示了如何在Matlab Simulink环境下构建完整的仿真模型,涵盖各模块间的电气连接与信号交互,为新能源系统的优化提供了理论和技术支持。 适合人群:从事电力电子、新能源系统设计的研究人员和工程师,尤其是那些需要深入了解光伏储能系统工作原理的人群。 使用场景及目标:适用于希望掌握光伏储能系统中关键组件如MPPT、恒流充放电控制及双有源桥DC-DC变换器的设计与仿真的技术人员。目标是在实际工程项目中提高系统的效率和可靠性。 其他说明:文中提供的代码片段和建模思路有助于读者更好地理解和实践相关技术,同时也强调了一些常见的陷阱和调试技巧,帮助避免潜在的问题。

    数学建模_Matlab_SPSS_教程分享_学习用途_1742838826.zip

    线性代数

    电机调速技术解析:直流电机双闭环与多种电机滞环调速方法对比

    内容概要:本文详细介绍了不同类型电机的调速方法,重点探讨了直流电机双闭环调速、永磁同步电机电流滞环闭环调速以及异步电机滞环电流调速。文中不仅提供了每种调速方法的基本原理和技术特点,还附带了相应的代码示例进行辅助解释。此外,文章对永磁同步电机的电流滞环调速与SVPWM调速进行了对比,指出了各自的优劣之处。最后,强调了在实际应用中选择合适调速方案的重要性。 适合人群:从事电机控制系统设计与开发的技术人员,尤其是有一定电机控制基础的研发人员。 使用场景及目标:适用于需要深入了解电机调速机制及其应用场景的专业人士。目标是帮助读者掌握不同电机调速方法的特点,以便在实际工程中做出最优选择。 其他说明:文章通过具体的代码实例展示了调速方法的实际应用,使读者能够更好地理解和实践相关技术。同时提醒读者在实际调试过程中要注意参数设置和硬件条件的影响。

    人员晋升推荐表.xls

    人员晋升推荐表.xls

    员工生日关怀方案.doc

    员工生日关怀方案

    模拟IC设计:解析国际知名大厂的SAR、Sigma-Delta和Pipeline ADC逆向工程

    内容概要:本文详细介绍了对国际知名大厂的三个逆向ADC电路(SAR ADC、Sigma-Delta ADC和Pipeline ADC)进行深入剖析。作者通过Cadence Virtuoso平台研究了这些电路的标准单元库设计,探讨了各个电路的关键技术和实现细节。对于24bit Sigma-Delta ADC,重点讨论了其调制器部分的时钟相位分配和噪声整形技术;对于16bit SAR ADC,则关注其比较器阵列的独特设计以及动态锁存比较器的应用;而对于14bit Pipeline ADC,着重分析了其级间放大器设计和电荷共享技术。此外,文中还提到了在将这些设计适配到自家工艺过程中遇到的问题及其解决方案,如电容寄生效应、时序约束调整、运放结构优化等。 适合人群:从事模拟集成电路设计的专业人士,尤其是对ADC设计感兴趣的工程师和技术研究人员。 使用场景及目标:帮助读者深入了解高精度ADC的工作原理和设计技巧,掌握逆向工程技术在实际项目中的应用,提高对不同工艺节点下ADC设计的理解和适应能力。 其他说明:文中提供了大量具体的代码片段和仿真命令,便于读者理解和实践。同时,作者分享了许多宝贵的经验教训,强调了在逆向工程中需要注意的技术细节和潜在风险。

    大型立体仓库智能物流系统的PLC控制与优化设计

    内容概要:本文详细介绍了大型立体仓库智能物流系统的构建与优化。该项目涉及一万多个库位、一百多台输送机和八台堆垛机,采用了西门子PLC作为控制核心,通过无线网桥与WCS和WMS系统对接。文章重点讲解了梯形图编程和功能块的应用,如输送机启停控制、堆垛机移动控制、路径规划、无线通讯处理以及异常处理机制。此外,还探讨了设备协同、逻辑优化、任务分配算法和速度曲线规划等方面的技术细节。 适合人群:从事工业自动化、智能仓储系统设计与开发的工程师和技术爱好者。 使用场景及目标:适用于智能仓储系统的设计、实施和维护,旨在提高系统的稳定性、效率和可维护性。 其他说明:文中提供了大量实际项目中的代码示例和调试经验,有助于读者理解和应用相关技术。

    新员工月工作总结表.xlsx

    新员工月工作总结表.xlsx

    西门子PLC汽车电子零件装配线SCL语言模块化编程与集成解决方案

    内容概要:本文详细介绍了基于西门子S7-1500 PLC的汽车电子零件装配线集成解决方案。主要内容涵盖伺服轴控制、阿特拉斯拧紧枪控制、康耐视视觉检测系统以及HMI界面的设计与实现。文中展示了如何利用SCL语言将多种工业设备(如HMI、伺服电机、六轴机器人等)的功能封装为标准化功能块,从而提高系统的模块化程度和可复用性。同时,还分享了一些实际项目中的调试经验和优化技巧,如通过调整加减速曲线避免机械振动、设置扭矩保持时间和视觉检测的防抖定时器等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是熟悉PLC编程和工业自动化设备集成的专业人士。 使用场景及目标:适用于汽车制造行业的生产线控制系统设计与实施。主要目标是帮助工程师快速掌握如何使用SCL语言构建高效稳定的PLC控制系统,提升生产效率和产品质量。 其他说明:文中不仅提供了详细的代码示例,还结合具体的应用场景进行了深入剖析,有助于读者更好地理解和应用相关技术。此外,强调了模块化编程的优势,如减少重复劳动、便于维护升级等。

    嵌入式系统中基于STM32/AT32/GD32的串口IAP Bootloader实现与远程升级方案

    内容概要:本文详细介绍了如何在STM32、AT32和GD32等Cortex-M系列MCU上实现串口IAP(In Application Programming)Bootloader,支持远程升级及RS485升级。主要内容涵盖Bootloader的工作原理、内存分配、通信协议设计、Flash写入操作以及跳转应用程序的关键步骤。文中提供了具体的代码示例,如Bootloader主循环、RS485收发控制、Flash写入、CRC校验等,并分享了多个实战经验和注意事项,确保数据传输的可靠性。 适合人群:从事嵌入式系统开发的技术人员,尤其是对STM32、AT32、GD32等国产MCU有一定了解并希望掌握串口IAP技术的研发人员。 使用场景及目标:适用于需要远程升级固件的嵌入式项目,帮助开发者避免现场升级带来的不便,提高设备维护效率。目标是让读者能够独立实现一个可靠的串口IAP Bootloader,掌握RS485通信和Flash编程的关键技术。 其他说明:文中提到的代码和配置已在GitHub上提供,方便读者下载和实践。同时,作者分享了许多实战经验和常见问题解决方案,有助于减少开发过程中可能出现的问题。

    线性代数_矩阵运算_方程组解释_MIT公开课笔记用途_1742822302.zip

    线性代数

    学生会干部竞选清心简约.pptx

    学生会干部竞选清心简约.pptx

Global site tag (gtag.js) - Google Analytics