Android:从绘制一张流程图来体验View的自定义过程(一)

本文介绍了Android自定义View的过程,以绘制订单流程图为示例,讲解了自定义属性的定义、获取和使用,强调了自定义View扩展性和耦合性的考虑。文章详细阐述了在XML中实例化构造函数时获取自定义属性的注意事项,如单位转换和内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

概述

        自定义View向来不是一个轻松的话题。虽然对于android原生开发而言,这只能算是一项基本的技能,但真正当我们拿到一份需要我们自定义去实现的需求的时候,多少还会有点手足无措。具体是什么原因,我也不知道,也许,“菜,是原罪”。‘’“业精于勤,荒于嬉”,也许就是我们每一次需要的去践行这种需求的时候,内心的那一点点惰性促使我们刻意地绕过这种实践机会。久而久之,对于同一种事物的排斥感与畏惧感就与日俱增。所以,砖还是要搬的,代码还是要敲的。自定义View,还是需要去自定义的。

       学习自定义View,第一步得先明白为什么要自定义View。这个问题感觉有点弱智。但仔细想一想,这个问题确实是有值得思考的空间。我们不能因为敲代码而去敲代码,更不能因为自定义View而去自定义View。前端View这个组件出现的目的是什么?简而言之,交互。换句话说,我们需要通过这个View展示我们需要展示给用户的信息,同时也需要这个View获取用户希望传递给我们的信息。如果以目前的我们所知道的组件无法满足我们交互的时候,我们就应该考虑自定义View了。感觉说了这些跟没说了一样,其实我想说的是,实际上很多的需求我们都是可以通过一些其他的技术,比如说动画,组合控件等来实现我们交互上的需求,没有必要去自定义View。自定义View的时间成本比较大。需要考虑的问题比较多,维护与测试的时间长,在这个注重敏捷开发的时代,还是要比较慎重的。

        如果已经确定了需要走自定义View这条路,则接下来需要选择去确定自定义View的方式。自定义View的方式有三种:1.将系统中原有组件组合,实现新的View 或者layout。这种方式比较简单。2.对系统原有的组件进行改造。这也是比较常见的,比如说ImageView实现圆角。3.则是完完全全的去定义实现一个具备新的交互模式的View。

        今天的需求就是从无到有的去实现一个全新的View。这个View的需求是一个订单的流程图。具体效果如下

 

        需求分析。初次看到这张图。感觉实现的方式有很多种。用组合控件的方式可以很方便的实现这种需求。一个LineaLayout中横向布局四个Tab,上面是ImageView,下面是TextView,中间用背景颜色是黄色的View连接。感觉没有必要自定义View。但是。我需要说明的是,通过组合控件的方式确实是可以实现这种需求,但是在涉及到比较多的界面的时候,是不是每一处,我们都要手动的去修改View的状态(修改Tab的背景图,文件颜色,连接线的颜色)?如果我们把这些UI的变化作为View本身内部的一种绘画机制,从某种意义上说,是不是也是一种代码上的封装。反正我觉得是。

      在我决定要自定义的去实现这个View的时候,我已经开始根据UI给的需求考虑这个View的扩展性了。自定义的这个View我把它取名叫做StepView,步骤图。任何一个自定义View的扩展性或者说耦合性都应该是我们重点考虑的点,这个我的个人观点,换句话说,自定义View的产生可能是基于某种特别的需求,但是,它的出现不应该仅仅局限于这种需求。所以,扩展性的考虑应该是非常重要的方面。对于UI给的这个图,对于功能扩展性的考虑如下(常规,很多情况下要结合具体的实际):

  1. 步骤图中每个步骤的图标是可以定制的(样式,大小,默认图标(选中,非选中));
  2. 步骤图中的每个图标之间的连接线应该是可以定制的(颜色(选中与没选中),宽度);
  3. 步骤图中的每个步骤的文字说明应该是可以定制的(内容,大小,颜色);
  4. 步骤图的总步骤数应该是可以是可以动态设定的,当前所在步骤数也是可以动态设定的;

而这些扩展性的实现需要用到自定义View当中的自定义属性;

&nbs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值