了解View---------------【Android基础】

这篇博文,仅是我写的总结,所以没有实战部分。

 

前言

view,它是所有控件的基类。如果了解过view的人,应该要知道除了view,还有ViewGroup;ViewGroup的话,它是有一组view组成的。

 

所以View虽然不是四大组件(activity、service、content provider、broadcast receiver),但是它具有同等的重要性。

 

说道这里的话,就要了解下view体系中,最为重要的是“自定义view”;但是自定义的话,就需要注意的它可能引起“滑动冲突”。

注:“滑动冲突”指的是处于不同层级的view体系都可以响应用户的滑动操作,而导致的问题。

 

所以如果自定义的话,可能需要解决“滑动冲突”的问题。而这个解决办法是建立在你了解view的事件分发机制的基础上。

 

Android的UI层级绘制体系

 

 

View事件分发机制

这里分析的是MotionEvent,即是点击事件。所以,所谓的点击事件的事件分发,其实就是对MotionEven事件的分发过程。

而这个过程,其实也就是当有一个MotionEvent产生后,把它反应给某个具体的view(控件)

而这个过程有经过几个方法共同完成的,分别是dispatchTouchEvent、onIonInterceptTouchEvent、onTouchEvent。

点到为止,有兴趣的同学可以去了解下。。。

下面就是有关于事件传递的机制的总结。

 

好吧,这里我也不太理解,虽然我也写过自定义的view。(终究是一只菜鸟,虽然已经大二了)

虽然我学Android有近一年了。但是我对Android的知识点真的了解不深唉!只能写成这样了。如果想知道解决“滑动冲突”的话,你可以看下任玉刚的《Android开发艺术探索》,这里我就不写了。

 

好了,了解下view的其他知识点。view的位置参数、view的滑动、弹性滑动。。。

view的位置参数

view的位置参数,个人觉得看下面这几张图就可以了。

至于x、y、translateX和translateY,这些都是Android3.0出现的。x和y都是View的左上角的坐标,而后两个则是偏移量。

 

 

在这里,额外了解view中的一些基础知识。

TouchSlop是最小偏移量

VelocityTracker是速度追踪

GestureDetector是手势检测

Scroller是弹性滑动对象

 

view的滑动

其实这个功能就是当点击事件传递到view时,系统记下触摸点的坐标,手指移动时系统记下运动后触摸的坐标并算出偏移量,并通过偏移量来改变View的坐标。

所以实现这个功能的话,常用的有三种方法:

  1. 通过View本身提供的ScrollTo和ScrollBy这两种方法。(操作简单,适合对view的内容进行)
  2. 通过动画给View施加平移效果。(操作简单,主要适用没有交互的view和实现复杂的动画效果)
  3. 使用View的LayoutParams使得View重新布局。(操作稍微复杂,适合有交互的view)

 

弹性滑动的话,就是也是通过三种方式:使用Scroll、通过动画、使用延时策略。

 

到了这里的话,仅仅是对view这个机制进行了解而已,还没有了解其重要部分:自定义view。

 

 

自定义view

其实如果是你自定义view的话,就需要继承有关于view这个抽象的父类。

所以实现的自定义view也是有分类的:

  1. 继承view重写onDraw方法
  2. 继承ViewGroup派生特殊的Layout
  3. 继承特定的view(例:Button...)
  4. 继承特定ViewGroup(例:LinearLayout...)

但是到这里,你需要注意一些事项:

  1. 让View支持wrap_content。因为如果不处理的话,可能使用的时候就无法到达预期的效果。
  2. 如果有必要,让你的View支持padding。这是因为如果不在draw方法处理这个padding的话,这个属性就可能不起作用。
  3. 尽量不要在View中使用Handler,没必要,你可以使用view内部本身提供的post系列的方法。
  4. View中如果有线程或者动画,你需要及时停止。因为可能导致内存泄漏。
  5. View带有滑动嵌套情形时,需要处理好滑动冲突。否则可能影响view的效果。

 

如果到这里,你还想了解的话,建议到自定义View心法——View工作流程或者是Android开发艺术探索。

 

对了还有一个基础知识需要了解的,那就是view的工作过程,如下图所示:

 

 

 

嗯,到这里的话,应该大概了解View这个体系。

 

 

参考资料:

自定义View心法——View工作流程

Android事件分发机制详解与实战剖析,一张事件分发流程图,让你彻底搞明白

Android开发艺术探索

Android进阶之光

深入理解Android内核设计思想

 

个人推荐你在看了这篇博文后,你去了解Android开发艺术探索、Android进阶之光。之后再回头了解深入理解Android内核设计思想。

你就好似打开一个另一个世界一样。--------心里想:哦!原来还可以这些啊。

 

如果想实践下,那么可以:

Android 自定义view,画图板练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值