《Android开发艺术探索》笔记(View的知识体系)

来源:互联网 发布:买了域名怎么卖 编辑:程序博客网 时间:2024/06/05 09:15

上周在更新博客的时候发现,自己做的一个小Demo不够理想,很多知识细节理解得不是很透彻,遂反省。发现自己Android基础知识学习不够系统,很多细节东西都没弄清楚,总在Github,CSDN里兜兜转转,发现自己去年买的《Android开发艺术探索》似乎才看一点点,总依赖着别人总结好的文章笔记,本末倒置,盲点太多。开始第一遍研读此书,做一些简要笔记,方便日后查阅。

1.View的位置由四个定点坐标点决定,left,top,right,bottom,这些坐标都是相对坐标,相对于父控件,在View中可以通过getLeft()等函数获取。

2.Android3.0开始,View增加了translationX,Y,这是相对父控件的偏移量,默认值为0。View在平移的过程中,top,left表示的原始左上角的位置信息,不会发生改变,改变的是X,Y,translationX,Y四个参数。

3.getX/getY返回的是当前View左上角X,Y的坐标;getRawX(),getRawY()返回的是相对于手机屏幕左上角的X,Y坐标。

4.TouchSlop,系统所能识别滑动的最小距离,也就是大于它,系统才认为你滑动了。源码中定义了这个参数,在frameworks/base/core/res/values/config.xml中为8dp。

5.VelocityTracker,速度追踪。需要先计算,再获取。在View 的onTouchEvent()中追踪速度,用法如下:

VelocityTracker velocityTracker=VelocityTracker.obtian();velocityTracker.addMovement(event);velocityTracker.conputeCurrentVelocity(1000);int xVelocity=(int)velocityTracker.getXVelocity();//水平方向速度;...竖直速度

6.GestureDetector,手势检测。常用的有onSingleTapUp(单击),onFling(快速滑动),onScroll(拖动),onLongPress(),onDoubleTap(双击),书中建议滑动事件可以自己在onTouchEvent中实现,监听双击事件使用这个;

7.View的滑动:
a.View中scrollTo/scrollBy,To是到具体的位置,by是相对上次位置的偏移量。getScrollX(),表示的是View的左边缘和View的内容边缘水平距离。scrollTo/By()只能改变View内容的位置,不改变布局中的位置;从左往右滑mScrollX为负,从上往下滑动mScrollY为负。
b.动画:同上不能真正改变View的位置,移动后单击新位置并不响应onClick事件。原来的位置可相应。
c.改变布局参数:如MarginLayoutParams等。
8.事件分发机制,如下:

public boolean dispatchTouchEvent(MotionEvent ev){   boolean consume;   if(onInterceptTouchEvent(ev))       consume=onTouchEvent(ev);   else       consume=child.dispatchTouchEvent(ev);   return consume;

三点注意:
a.如果View不消耗除DOWN以外的其他事件(up,move等),这个事件会消失,此时父元素的onTouchEvent并不会调用,并且当前View可以收到后续事件,最终消失的点击事件会传给Activity处理。
b.View的enable属性不影响onTouchEvent的默认返回值。
c.View无onIntercepTouch()

由于View分发事件内容较多,这篇不详解源码和其中细节,具体展开将放在下一篇。

阅读全文
1 0
原创粉丝点击