一篇文章彻底理解自定义View

本文详细介绍了Android中自定义View的相关知识,包括View的基础概念、滑动、动画、事件分发机制以及源码解析。重点讲解了View的位置表示、弹性滑动的实现、属性动画的使用和事件分发过程。同时,还涵盖了自定义View的实践,如继承系统控件、自定义组合控件和ViewGroup,以及解决ScrollView内嵌ListView显示不全的问题。

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

目录

一.View的基础 

1.view的基础概念

2.view的位置和事件event几种表示法

3.view的滑动

①.ScrollTo、ScrollBy:

②.布局位置(layout,offsetLeftAndRight,offsetTopAndBottom)

③.布局参数(LayoutParams)

4.view的弹性滑动

①.Scroller+computeScroll+scrollTo

②.动画

③.延时策略(Handler,view.postDelayed)

5.速度跟踪

①.VelocityTracker:速度追踪,可以判断控件或者页面是否快速滑动。

二.动画

1.view动画:平移缩放旋转淡入淡出动画(补间动画),帧动画。

 2.帧动画:顺序播放一组预先定义好的图片,类似电影播放。

3.属性动画:在一段时间内完成对象的一个属性值改变成另一个属性值。

①.比如:xml方式示例如下

②.一些常用的可以直接使用的属性动画的属性值(平移,旋转,透明,缩放)

③.插值器和估值器。

④.属性动画的监听器(AnimatorUpdateListener和AnimatorListener)

⑤.对任意属性进行动画。

⑥.ValueAnimator与ObjectAnimator过程区别:

4.使用动画注意事项:帧动画oom,属性动画内存泄漏,view动画清理

三.View的事件分发机制

1.MotionEvent和TouchSlop

2.GestureDetector、OnDoubleTapListener

3.事件分发机制(重点):事件分发过程dispatchTouchEvent,onIntercepteTouchEvent,onTouchEvent;

4.事件滑动冲突

四.View的相关源码解析

1.源码解析Activity的构成(解析activity的setContentView方法)

2.View的工作流程

 ①.view工作流程入口

②.measure的流程

③.layout的流程

五.自定义View 

1.继承系统控件的自定义View

①.先实现继承TextView的自定义TextView

②.然后在布局文件中使用

③.最后实现效果

2.继承View的自定义View

 ②.将这个矩形添加对padding的支持

 ③.根据前面的讲解知道wrap_content与match_parent对于View的效果是一样的,所以可以对wrap_content进行特殊处理

 ④.自定义属性

 3.自定义组合控件

4.自定义ViewGroup

 ①.继承ViewGroup,实现构造方法和抽象方法等

②.实现测量过程,由于是类似ViewPager,所以在AT_MOST的时候高度是子布局的高度,宽度是子布局的宽度相加,测量过程实现如下

③.实现onLayout,子元素的由左向右排列,所以top为0,bottom为子元素高度不变,left和right是一直相加从左到右排列

④.处理滑动冲突

⑤.弹性滑动到其他界面

⑥.快速滑动到其他界面

⑦.再次触摸屏幕阻止页面继续滑动,在手势抬起然后界面滑动过程再次点击需要让其不在滑动。

5.其他常见的自定义View

①.ScrollView内嵌ListView显示不全问题(只显示ListView的一行item)


一.View的基础 

1.view的基础概念

  • view:android中所有控件的基类。
  • viewGroup:控件组。

2.view的位置和事件event几种表示法

  • ①.view.getLeft(),view.getRight(),view.getTop(),view.getBottom():相对父布局的位置参数
  • ②.view.getX(),view.getY():相对父布局左上角的坐标,getX() = getLeft()+getTranslationX()
  • ③.view.getTranslationX(),view.getTranslationY():相对于原始位置的偏移量,例如:属性动画让其偏移后产生的偏移坐标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龚礼鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值