1. getmeasureHeight()//测量控件所占用的高度 getHeight()//测量控件所在屏幕之内占用的高度 !当控件能被屏幕所包裹的时候他两的值是一样的 offsetLeftAndRight自定义view移动
2.scrollTo()与scrillBy 前者是绝对坐标的移动,后者是相对坐标的移动,而不是控件的滚动
3.scroller 与overScroller 后者出现的晚,优化了滑动到边界的处理,都可以实现控件的滚动效果
4.当需要一个自定义一个本身不具有滑动效果的view,调用scroller.startScroll() 并且实现view本身的computeScroll方法
Scroller.startScroll(int startX, int startY, int dx, int dy)
- @Override
- public void computeScroll() {
- // 先判断mScroller滚动是否完成
- if (mScroller.computeScrollOffset()) {
- // 这里调用View的scrollTo()完成实际的滚动
- scrollTo( mScroller.getCurrX(), mScroller .getCurrY());
- // 必须调用该方法,否则不一定能看到滚动效果
- invalidate();
- }
- super.computeScroll();
- }
onFinishInflate() 当View中所有的子控件均被映射成xml后触发
onMeasure(int, int) 确定所有子元素的大小
onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发
onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
onDraw(Canvas) view渲染内容的细节
onKeyDown(int, KeyEvent) 有按键按下后触发
onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
onTrackballEvent(MotionEvent) 轨迹球事件
onTouchEvent(MotionEvent) 触屏事件
onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发
onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
onAttachedToWindow() 当view被附着到一个窗口时触发
onDetachedFromWindow() 当view离开附着的窗口时触发,该方法和 onAttachedToWindow() 是相反。
onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发
本文详细介绍了自定义View的方法及触摸事件处理技巧,包括测量控件尺寸、实现滚动效果、VelocityTracker的使用等核心内容。此外还涉及了自定义View的事件处理流程,如onMeasure、onDraw等。
2691

被折叠的 条评论
为什么被折叠?



