android两对概念辨析
两对概念辨析:
touchEvent vs. GestureDetector
Srcoller vs. ScrollView
到底这两对概念是什么关系呢?一一解析:
1.touchEvent vs. GestureDetector
当用户触摸屏幕的时候,会产生一系列的触摸事件,一般情况下,我们知道View类有个View.OnTouchListener内部接口,我们可以重写他的onTouch(View v, MotionEvent event)方法,以及View本身有一个onTouchEvent()方法,配合MotionEvent
参数类,可以处理一些touch事件。
从这角度说,onTouch()、onTouchEvent()这个方法太过简单,只能处理简单的点击事件,例如普通点击,向上滑动,向下,长按。如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根据用户触摸的轨迹去判断是什么手势)。当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。
Android sdk给我们提供了GestureDetector(Gesture:手势Detector:识别)类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。
- private class PicOnTouchListener implements OnTouchListener{
- @Override
- public boolean onTouch(View v, MotionEvent event){
- //event.getX获取X坐标;event.getY()获取Y坐标
- String sInfo="X="+String.valueOf(event.getX())+" Y="+String.valueOf(event.getY());
- tvInfo.setText(sInfo);
- return true;
- }
- }
- private class gesturelistener implements GestureDetector.OnGestureListener{
- public boolean onDown(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- public void onShowPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- public boolean onSingleTapUp(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- public boolean onScroll(MotionEvent e1, MotionEvent e2,
- float distanceX, float distanceY) {
- // TODO Auto-generated method stub
- return false;
- }
- public void onLongPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- // TODO Auto-generated method stub
- return false;
- }
- }
2.Srcoller vs. ScrollView
scroller只是一个滑动辅助类,并不能实现滑动,只是实现滑动的滚动效果,viewgroup的滑动还是要靠内部函数scrollTo()实现,一个viewgroup可以通过scroller实现滑动效果。ScrollView是一个viewgroup,也是靠scrollTo()实现滑动,但是滑动效果不是由scroller实现,而是靠scroller的高级版本overScroller实现滚动效果。
具体的overSrcoller请看另外一篇博客。