1. 什么是View?
View是Android所有控件的基类,在我们的手机上会显示的界面。View大的方向主要分两类:普通View和ViewGroup(是一个递归定义)。如图:
[1]
2. View的位置参数
从上面的坐标之间的关系,很容易得出
width = right - left
height = bottom - top
3. Motion Event
它是手指触摸屏幕后,产生的一系列事件,最经常使用的如下
1)ACTION_DOWN 手指刚接触到手机屏幕
2)ACTION_MOVE 手指在接触屏幕后,开始在手机上滑动
3)ACTION_UP 手指离开屏幕
在Motion_Event里有两个函数可以获得坐标
getX/getY 相对于当前View手指所在的坐标
getRawX/getRawY 相对于手机屏幕,手指的坐标
图中黑点就是手指所在位置
4. TouchSlop
TouchSlop是手机默认的 所能识别的滑动的最小距离。如果滑动小于这个距离,手机就认为这不是滑动。
通过两个方式可以查看:
1)ViewConfiguration.get(getContext().getScaledTouchSlop())
2)在android源码frameworks/base/core/res/res/values/config.xml 文件中 有<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>
5. VelocityTracker
获得滑动的速度
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(event);
若要获得当前滑动速度(x和y轴方向的)
mVelocityTracker.computeCurrentVelocity(1000);
float yVelocity = mVelocityTracker.getYVelocity();
float xVelocity = mVelocityTracker.getXVelocity();
速度公式为:
速度 = (终点 - 起点) / 时间
最后当我们不需要跟踪手势的速度时,需要重置和收回内存
mVelocityTracker.clear();
mVelocityTracker.recycle();
6. Scroller
实现弹性滑动,因为我们在使用scrollTo/scrollBy实现滑动时,将在瞬间完成,使得用户体验并不好
private Scroller mScroller new Scroller(getContext());
private void smoothScrollBy(int dx, int dy) {
mScroller.startScroll(0, getScrollY(), dx, dy, 500);
invalidate();
}
}
@Override
public void computeScroll() {
if(mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
}
}
具体的实现机制下节,详细描述
支持感谢,本文参考的内容的作者,若有参考遗漏请留言
若有错误,请多多留言,感激不尽
参考
[1] http://blog.csdn.net/yanbober/article/details/45970721
[2] 本文的大纲是根据 任玉刚 《Android开发艺术与探索》第三章 “View的事件体系” 3.1 节“View的基础知识”