android中自定义view需要了解哪些内容

来源:互联网 发布:淘宝魅力惠旗舰店 编辑:程序博客网 时间:2024/06/16 12:29

一、前言

这篇文章主要是对自己看过的自定义view的一些知识进行一些汇总,不会对一些api的细节进行讲解,所以篇幅不会太长,主要是帮助大家对自定义view进行了解,以及学习自定义view需要从哪些地方入手。

二、预备

1.为什么要自定义view

1)现有的view满足不了我们的需求,界面的一些元素需要我们自己去绘制。

2)现有的view可以满足我们的需求,自定义view只是为了抽象,为这个自定义view提供若干方法,可以将我们的一些内部逻辑封装到里面,方便调用,说简单点就是提高代码的复用率。

2.自定义view的好处

1)我们可以实现一些系统控件无法实现的绚丽效果,为应用增色。

2)将一些比较通用的交互效果提取成自定义view,方便复用,减少不必要的重复劳动。

3)将控件的一些内部逻辑封装到自定义view中,也能够便于应用解耦,我们在使用的时候不必关心它的内部实现。

三、正题

1.自定义view分类

其实简单的来分的话,自定义view我们可以分成两大种:组合控件和完全自定义控件。再细分一下,我们还可以分成四种:直接继承view,直接继承viewgroup,继承特定view,继承特定viewgroup。当然分类的标准并不统一,进行分类只是帮助我们在进行自定义的时候更加明确自己的方向,所以不用纠结到底该怎么去分类。

2.自定义view基础

要想随心所欲的去自定义view,我们首先需要了解一些基础知识:

1)view的位置参数,即top、left、right、bottom,当然你必须也要知道view是按什么标准来定义坐标系的。

2)MotionEvent和TouchSlop

3)VelocityTracker、GestureDetector和Scroller

4)Configuration和ViewConfiguration(提供了一些标砖常量)

5)ViewDragHelper(实现一些拖拽效果)

6)View、SurfaceView、TextureView的区别

3.自定义view的流程

为了让大家可以更加形象的了解,先贴一张图:



我们可以按照这个图大致的走一下这个流程
  • Constructors
         我们一般会在这里面进行一些参数的初始化,比如自定义属性,paint的一些属性设置等等。
  • onMeasure
         测量View及其子View的宽高属性,这里是属性,而不仅仅是宽高的值。我们要清楚什么时候我们需要去重写onMeasure方法:一般是自定义的view是直接继承view或者继承自viewgroup。
  • onLayout
        确定View及其子View的布局位置,也就是View及其子View在父容器中的坐标位置。只有在自定义ViewGroup的时候需要重写。
  • onSizeChanged
         View的大小发生改变时,将调用此函数,一个View的大小在绘制过程中可能发生改变,比如父View
  • onDraw
         View的内容绘制部分,也是实现自定义view最重要的一部分,你想实现什么样的效果,你就可以在系统提供给我们的canvas上面画就行了。

4.自定义view的精髓

上面我也说道了onDraw是自定义view最重要的一部分,在这里你可以自由发挥你的创造力和想象力,这时你就需要了解一些细节了。

     Canvas常用方法

          绘制图形(点、线、矩形、椭圆、圆等)

         绘制文本(文本的居中问题,需要Paint知识)

         画布的基本变化(平移、缩放、旋转、倾斜)

         画布的裁剪

         画布的保存

     Paint常用方法

         颜色

         类型(填充、描边)

         字体大小

         宽度

         对齐方式

         文字位置属性测量

         文字宽度测量

         笔锋

      Path常用方法

         添加路径

         移动起点

         贝塞尔(二阶、三阶)

         逻辑运算

         重置路径

         PathEffect

         Matrix

         PathMeasure

5.自定义view的拓展

如果上面的内容你都已经掌握了,那么你应该是可以绘制出丰富多彩的自定义view了。但是这还不够,这就好比一幅画,虽已具形态,但是还差点睛之笔让它活起来。我们给自定义view duang~duang~duang添加特效自然离不开动画,这里强烈推荐的是属性动画,不要问我为什么-_-。

    属性动画需要掌握的,标星的是重点!!!

      ObjectAnimator

      ValueAnimator

      AnimatorSet

      AnimatorListener和AnimatorListenerAdapter

      ※插值器(Interpolator)

      ※估值器(TypeEvaluator)

好了,现在我的自定义view也已经动起来了,是不是就大功告成了啊。NO,还不够,我们还需要交互啊。so,看下面

     View事件分发

          dispatchTouchEvent
          onInterceptTouchEvent
          onTouchEvent
          onTouchListener
          onClick
          onLongClick
          滑动冲突

   View的滑动

          Scroller
          invalidate和requestLayout的传递(要明白两者之间的区别)
      

四、结束语

至此,文章的内容就结束了,上面主要是基于2D层面去介绍的,假如有兴趣,大家还可以研究一下OpenGl、Camera等用法,让你的自定义view效果看起来更绚丽。在这里也给大家一些建议,千万别一言不合就自定义,能够用系统基础的控件去实现的尽量用系统的,因为系统自带效率会更高一些(谷歌进行优化过了),而且自定义view需要耗费较长的时间,又不一定能保证有系统控件的那么高的效率。

假如有什么遗漏的,欢迎大家补充。


0 0
原创粉丝点击